我有一个返回JSON的控制器。它采用了一种形式,通过spring注解来验证自己。我可以从BindingResult
获取FieldError
列表,但是它们不包含JSP将在<form:errors>
标记中显示的文本。如何获取要以JSON格式发送的错误文本?
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody JSONResponse submit(@Valid AnswerForm answerForm, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response) {
if (result.hasErrors()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.ERROR);
//HOW DO I GET ERROR MESSAGES OUT OF BindingResult???
} else {
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.OK);
return r;
}
}
JSONREsponse类只是一个POJO
public class JSONResponse implements Serializable {
private JSONResponseStatus status;
private String error;
private Map<String,String> errors;
private Map<String,Object> data;
// ...getters and setters...
}
调用BindingResult.getAllErrors()
返回一个FieldError
对象数组,但它没有实际的错误。
6条答案
按热度按时间yfwxisqw1#
我最近遇到了这个问题,并且找到了一个更简单的方法(也许是Spring 3的支持)
无需更改/添加消息源。
4szc88ey2#
Java 8 Streams
ycggw6v23#
BEAN XML:
JAVA:
**注意:**调用Errors.getDefaultMessage()不一定返回代码+ args生成的消息。defaultMessage是在调用Errors.rejectValue()方法时定义的单独值。请参见此处的Errors.rejectValue()API
yb3bgrhw4#
WebMvcConfigureerAdapter:
控制器:
d4so4syb5#
要获取与每个字段关联的所有错误的
Map
:要获得
Map
,其中每个字段的错误合并为单个String
:dfty9e196#
免责声明:我仍然不使用Spring-MVC 3.0
但我认为Spring2.5使用的相同方法可以满足您的需求
希望能对你有用
更新
如果你想得到你的资源包提供的消息,你需要一个注册的messageSource示例(它必须名为messageSource)
将MessageSource示例注入到View中
要获取您的消息,请执行以下操作
您的验证程序应该如下所示