不输入 springboot 控制器的方法,无效的表单输入会抛出错误的请求。如何处理?

我有一个带有经过验证的表单参数的控制器:

@PostMapping("/report")
public String reportSubmit(@Valid @ModelAttribute HomeFormInput homeFormInput,Model model,BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "home";
    }

表单包含一个具有验证规则的输入字段:

@Data
public class HomeFormInput {
    @NotEmpty(message = "You must provide at least one id")
    String input;
    String email;
}

当我尝试通过将 id 字段留空来测试它时,它会抛出 BAD REQUEST 并且甚至没有进入控制器的方法(我试图调试它)。日志内容如下:

2021-01-17 20:32:51.705 DEBUG 20412 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:映射到 com.fiserv.report.generator.controller.ReportController#homeSubmit(HomeFormInput,Model,绑定结果) 2021-01-17 20:32:51.789 调试 20412 --- [nio-8080-exec-2] .wsmmaServletInvocableHandlerMethod:无法解析公共 java.lang.String com.fiserv.report.generator 中的参数 [0]。 controller.ReportController.homeSubmit(com.fiserv.report.generator.model.HomeFormInput,org.springframework.ui.Model,org.springframework.validation.BindingResult): org.springframework.validation.BeanPropertyBindingResult: 1 个错误 字段“输入”上的对象“homeFormInput”中的字段错误:拒绝值 [];代码 [NotEmpty.homeFormInput.input,NotEmpty.input,NotEmpty.java.lang.String,NotEmpty];参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [homeFormInput.input,input];参数 [];默认消息[输入]];默认消息 [您必须至少提供一个测试计划 ID] 2021-01-17 20:32:51.791 WARN 20412 --- [nio-8080-exec-2] .w.s.m.s.DefaulthandlerExceptionResolver :已解决 [org.springframework.validation.BindException: org.springframework.BindingResult:Property 错误 字段“输入”上的对象“homeFormInput”中的字段错误:拒绝值 [];代码 [NotEmpty.homeFormInput.input,input];参数 [];默认消息[输入]];默认消息 [您必须至少提供一个测试计划 ID]] 2021-01-17 20:32:51.791 调试 20412 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet:完成 400 BAD_REQUEST 2021-01-17 20:32:51.792 调试 20412 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost]:处理 ErrorPage[errorCode=0,location=/error] 2021-01-17 20:32:51.796 调试 20412 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:POST“/error”的“错误”调度,参数={masked}

如何让它进入处理验证错误的方法?

shuang890802 回答:不输入 springboot 控制器的方法,无效的表单输入会抛出错误的请求。如何处理?

事实证明,控制器参数列表中的更改可以解决问题 - 我从参数列表中删除了模型,现在它很有吸引力。所以控制器的最终签名是这样的:

@PostMapping("/report")
public String reportSubmit(@Valid @ModelAttribute HomeFormInput homeFormInput,BindingResult bindingResult) {
...
}

这是文档中的重要部分

Errors,BindingResult 用于访问来自验证和数据的错误 命令对象的绑定(即@ModelAttribute 参数)或 来自@RequestBody 或@RequestPart 验证的错误 论据。 您必须声明一个 Errors 或 BindingResult 参数 紧接在经过验证的方法参数之后。

本文链接:https://www.f2er.com/1089073.html

大家都在问