Ale*_*xey 5 java validation spring json spring-mvc
我使用 Spring MVC 3.2.4。我有一个从 HTML 表单接收数据的控制器方法。该方法具有以下签名:
@RequestMapping(...)
public String updateProduct(@Valid Product product, BindingResult bindingResult)
Run Code Online (Sandbox Code Playgroud)
在该方法中,我可以通过以下方式获取有关数据绑定(例如,整数字段中的非整数值)和验证(JSR-303) 错误的信息:
if (bindingResult.hasErrors()) {
List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors) {
System.out.println(error.getObjectName() + " - " + error.getCode());
}
}
Run Code Online (Sandbox Code Playgroud)
我想更改此方法,以便它可以接收 JSON 格式的数据而不是application/x-www-form-urlencoded. 我@RequestBody在方法签名中添加了注释:
@RequestMapping(...)
public String updateProduct(@Valid @RequestBody Product product, BindingResult bindingResult)
Run Code Online (Sandbox Code Playgroud)
在更新的方法中,我仍然可以以相同的方式获取所有验证错误。但是,数据绑定错误会生成HttpMessageNotReadableException. 异常似乎没有用于访问错误代码和字段/对象名称等内容的属性。此外,该异常阻止了 JSR-303 验证,用户在下一次数据提交之前不会收到任何 JSR-303 验证消息。
当我实现接收 JSON 的控制器方法时,如何获取有关数据绑定错误的信息?
更新:
我能想到的一种解决方法是将Product类中的所有字段更改为String,然后使用 JSR-303 验证它们。这样,就不会发生数据绑定错误。但是我必须创建一个Product具有适当数据类型的类的克隆。
不要混淆,HttpMessageNotReadableException与验证错误无关。HttpMessageConverter当 an无法读取时,它会被抛出HttpInputMessage。对于 JSON,这可能意味着MappingJackson2HttpMessageConverter. Product在本例中,如果在将 JSON 反序列化为您指定的任何类型的实例时出现问题,它将抛出该异常。如果 JSON 格式错误,则可能会发生这种情况。
您无法在BindingResult.
| 归档时间: |
|
| 查看次数: |
4287 次 |
| 最近记录: |