gpt4 book ai didi

spring - 使用 Spring MVC 验证模型属性时出现 400 错误请求

转载 作者:行者123 更新时间:2023-12-02 06:38:07 26 4
gpt4 key购买 nike

我正在编写一个简单的 Controller ,它接受用户注册时的请求,我想验证模型属性,但收到 400 错误请求。我查过this question here这几乎是我遇到的问题,但解决方案对我不起作用。

 @RequestMapping(method = RequestMethod.POST, value = "/sign-up", consumes = "application/x-www-form-urlencoded")
public ModelAndView addUser(ModelMap model,@Valid @ModelAttribute
UserRegistrationInfo userRegistrationInfo,
HttpServletRequest httpRequest,
HttpSession httpSession,
BindingResult result) { ..... }

编辑

Spring 版本:4.0.6.RELEASE

我阅读了SpringMVC架构,并在DefaultHandlerExceptionResolver类、doResolveException方法处设置断点,发现抛出了BindException异常。但是,我不知道为什么BindingResult 未填充,也未调用方法执行来让我确定我想要什么行为?执行结束于 return handleBindException((BindException) ex, request, response, handler); ,即

protected ModelAndView handleBindException(BindException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { response.sendError(HttpServletResponse.SC_BAD_REQUEST); return new ModelAndView(); } 

最佳答案

正如您所了解的那样,由于绑定(bind)错误,您收到了错误的请求。您需要的所有信息实际上都包含在 BindingResult 对象中,但为了正确使用它,您应该将 BindingResult 设置为立即跟随您的 ModelAttribute 例如

 @RequestMapping(method = RequestMethod.POST, value = "/sign-up", consumes = "application/x-www-form-urlencoded")
public ModelAndView addUser(ModelMap model,@Valid @ModelAttribute
UserRegistrationInfo userRegistrationInfo, BindingResult result
HttpServletRequest httpRequest,
HttpSession httpSession,
) { ..... }

虽然参数的顺序通常并不重要,但 BindingResult 参数是一个异常(exception),因为该方法可以包含多个 ModelAttribute 参数,每个参数都有其自己的专用实例 绑定(bind)结果。在这种情况下,通过将 BindingResult 参数紧跟在其所应用的 ModelAttribute 后面来建立关联。

当您重新排序参数时,您将不再收到400错误,而是请求将进入 Controller ,并且日志将显示确切的绑定(bind)问题,或者您只需检查 result.hasErrors() 并通过调用 result.getAllErrors() 迭代字段错误。那么它应该足够简单来解决您的绑定(bind)问题以及随之而来的错误请求。

检查文档 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-methods 的部分

关于spring - 使用 Spring MVC 验证模型属性时出现 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878055/

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