我有一个ArticleFormModel
正常发送的包含数据,html form
它是由 Spring 使用注释注入的@ModelAttribute
,即
@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
HttpServletRequest request, BindingResult errors)
{
//irrelevant stuff
}
在某种程度上,一切都运行良好。问题是ArticleFormModel
包含一个double
字段(protected
,使用普通设置器设置)。只要用户发送的数据是数字,一切都可以正常工作。当他们输入一个单词时,我得到的只是400 Bad Request Http Error
.
我已经WebDataBinder
为此控制器注册了一个
@InitBinder
protected void initBinder(WebDataBinder binder) throws ServletException
{
binder.setValidator(validator);
}
validator
自定义类实现接口的实例在哪里,org.springframework.validation.Validator
但我不知道下一步该做什么。我希望能够解析模型,获取有效的 HTTP 响应并在表单中显示错误消息。该initBinder()
方法被调用,我可以从中调用validator.validate()
,但它不会改变错误(对于那个错误的数据)。
我知道我可以使用 setter 来解析字符串,检查它是否是一个数字,如果不是,则将该信息存储在一个变量中,然后在验证期间检索该变量,但这似乎工作量太大。必须有一种更简单的方法来强制字段上的类型而不会出错。另外,问题在于数据绑定,而不是验证,所以我觉得应该放在各自的代码层。
我也在考虑实施java.beans.PropertyEditor
和调用binder.registerCustomEditor()
,但我缺乏可靠的知识来源。
客户端验证(通过 JavaScript 检查数据是否为数字)是不可能的。
TL;博士:
如何在@ModelAttribute
不获取的情况下强制字段为项目的特定类型400 Bad Request Http Error
?