0

我有经典的 Spring MVC 应用程序。

我想使用相应的 Java Bean 验证表单,并使用 JSR-303 验证注释进行注释。

表单数据由使用 JSON 的 ajax 调用发送。这个 Json 被 Jackson 转换为目标 Java Bean - 由 spring 自动转换:

@RequestMapping(value = ControllerConstants.CALCULATION_MAPPING_SUBMIT_FORM,method =  RequestMethod.POST)
public String submitForm(@Valid @RequestBody MyFormBean bean, final BindingResult result) { 
... 
}

问题是,例如,如果我的 bean 中有一个 Integer 字段,但在 JSON 中,值不是数字。在这种情况下,它无法创建无法验证的目标 bean。这种情况无法使用自定义属性编辑器解决,因为无法将不代表整数的文本转换为整数。

似乎这在 Grails 中得到了解决,我们从验证器中得到错误(错误是域对象),它必须在数据绑定期间创建。所以我假设 spring 支持这一点,因此 Grails 只使用 Spring 的支持)

那么如何优雅地解决这种情况来处理这个“验证”错误呢?

更新

实际上我想通了,如果我们使用简单的表单提交,这就是spring支持的。问题在于杰克逊反序列化的集成。它不会填充错误。仍然如何解决这个问题?

4

1 回答 1

0

我看到两个选项...

  1. 进行客户端验证,如果存在格式问题,则不允许提交表单。

  2. 在服务器端,您必须有一种处理异常的机制,该机制将捕获它并将问题报告给客户端。

希望有帮助。

编辑:

那么没有客户端验证可能不是一个好的用户体验。用户不希望在进行服务器往返后被提醒有关验证错误。但是,如果这仍然是一个限制,请查看以下 url,它提供了处理此类问题和报告信息性错误消息的优雅方式。

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

于 2012-05-16T13:18:02.313 回答