gpt4 book ai didi

java - 获取 Spring MVC 中 JSON 表单绑定(bind)错误的详细信息

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:28 25 4
gpt4 key购买 nike

我使用 Spring MVC 3.2.4。我有一个从 HTML 表单接收数据的 Controller 方法。该方法具有以下签名:

@RequestMapping(...)
public String updateProduct(@Valid Product product, BindingResult bindingResult)

在该方法中,我可以获得有关数据绑定(bind)(例如,整数字段中的非整数值)和验证 (JSR-303) 错误的信息通过以下方式:

if (bindingResult.hasErrors()) {
List<FieldError> errors = bindingResult.getFieldErrors();

for (FieldError error : errors) {
System.out.println(error.getObjectName() + " - " + error.getCode());
}
}

我想更改此方法,以便它可以接收 JSON 格式的数据,而不是 application/x-www-form-urlencoded。我在方法签名中添加了 @RequestBody 注释:

@RequestMapping(...)
public String updateProduct(@Valid @RequestBody Product product, BindingResult bindingResult)

在更新后的方法中,我仍然可以用同样的方式得到所有的验证错误。但是,数据绑定(bind) 错误会生成 HttpMessageNotReadableException。该异常似乎没有用于访问错误代码和字段/对象名称等内容的属性。此外,异常会阻止 JSR-303 验证,并且在下一次数据提交之前,用户不会收到任何 JSR-303 验证消息。

当我实现接收 JSON 的 Controller 方法时,如何获取有关数据绑定(bind)错误的信息?

更新:

我能想到的一种解决方法是将 Product 类中的所有字段更改为 String,然后使用 JSR-303 验证它们。这样,就不会发生数据绑定(bind)错误。但是我必须创建一个具有适当数据类型的 Product 类的克隆。

最佳答案

不要混淆,HttpMessageNotReadableException与验证错误无关。当 HttpMessageConverter 时它被抛出无法读取 HttpInputMessage .对于 JSON,这可能意味着 MappingJackson2HttpMessageConverter .如果在将 JSON 反序列化为您指定的任何类型的实例时出现问题,它将抛出该异常,在本例中为 Product。如果 JSON 格式不正确,就会发生这种情况。

您无法在 BindingResult 中捕获这些错误。

关于java - 获取 Spring MVC 中 JSON 表单绑定(bind)错误的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com