如何在 Spring MVC 控制器方法中检查未绑定的请求参数?

Ste*_*ers 5 java parameters spring controller spring-mvc

给定一个 Spring-MVC 控制器方法:

@RequestMapping(value = "/method")
public void method(ParamModel params) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

与模型类:

public class ParamModel { public int param1; }
Run Code Online (Sandbox Code Playgroud)

以下两个结果符合预期/期望:

  • 请求param1=1method成功完成。
  • 请求param1=blahJBWEB000120: The request sent by the client was syntactically incorrect.

然而...

  • 如果使用附加参数(例如nonexistentparam=1)发出请求,则没有错误

如果请求包含不属于此 API 的任何参数,是否有办法确保请求得到验证和拒绝?

Jai*_*o99 0

Bean 验证 (JSR-303) 是一个好的实践。这是文档

保持简单,你需要在你的 spring 配置中包含以下内容:

<mvc:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

你可以在你的代码中添加这个:

@RequestMapping(value = "/method")
public void method(@Valid ParamModel params, BindingResult result) {
    if(result.hasErrors()) {...}
    else {...}
}

public class ParamModel { 
    @SomeAnnotation // details see document 
    private int param1; 
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然 Bean Validation 很有用,但这并不能回答这个问题,即如果发送额外的 HTTP 参数,Spring 如何引发错误。Bean 验证在它们设置到模型对象后发生。 (2认同)