gpt4 book ai didi

java - Spring 表单 ModelAttribute 字段验证,避免 400 Bad Request Error

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:59 26 4
gpt4 key购买 nike

我有一个 ArticleFormModel 包含由普通 html 表单 发送的数据,它由 Spring 使用 @ModelAttribute 注释注入(inject),即

@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
HttpServletRequest request, BindingResult errors)
{
//irrelevant stuff
}

在某些时候一切都完美无缺。问题是 ArticleFormModel 包含一个 double 字段(protected,使用普通 setter 设置)。只要用户发送的数据是数字,一切正常。当他们输入一个词时,我得到的只是 400 Bad Request Http Error

我已经为这个 Controller 注册了一个WebDataBinder

@InitBinder
protected void initBinder(WebDataBinder binder) throws ServletException
{
binder.setValidator(validator);
}

其中 validator 是实现 org.springframework.validation.Validator 接口(interface)的自定义类的实例但我不知道下一步该怎么做。我希望能够解析模型,获得有效的 HTTP 响应并在表单中显示错误消息。 initBinder() 方法被调用,我可以从中调用 validator.validate() 但它不会更改错误(对于错误的数据)。

我知道我可以使用 setter 来解析字符串,检查它是否是数字,如果不是,则将该信息存储在变量中,然后在验证期间检索该变量,但这似乎工作量太大。必须有一种更简单的方法来在字段上强制输入类型而不会出错。另外,问题在于数据绑定(bind),而不是验证,所以我觉得它应该放在各自的代码层。

我也在考虑实现 java.beans.PropertyEditor 并调用 binder.registerCustomEditor(),但我缺乏可靠的知识来源。

客户端验证(通过 JavaScript 检查数据是否为数字)是不可能的。

长话短说:

如何在不出现 400 Bad Request Http Error 的情况下将字段强制为 @ModelAttribute 项的特定类型?

最佳答案

您可以使用 <form:errors>绑定(bind)错误。

看起来像这样:

Controller :

@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
BindingResult errors, HttpServletRequest request)
{
if (errors.hasErrors()) {
// error handling code goes here.
}
...
}

errors参数需要放在模型的右边。

有关详细信息,请参见下文(示例 17.1):

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-methods

jsp:

<form:form modelAttribute="articleFormModel" ... >
...
<form:errors path="price" />
</form:form>

消息属性文件:

typeMismatch.articleFormModel.price=customized error message

关于java - Spring 表单 ModelAttribute 字段验证,避免 400 Bad Request Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18323863/

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