关于使用spring boot和javax.validation验证对REST端点的put调用的问题(不是spring验证)。
您的资源中具有以下方法:
@PutMapping(...)
public Response getResult(@RequestBody @Valid myBody, @PathVariable @MyIdValidation long id) {
}
当我调用该方法时,myBody
得到验证,并且在异常处理程序中得到MethodArgumentNotValidException
。但是参数id
未得到验证!
只有myBody
有效,id
也会得到验证。
我发现的唯一解决方案是不使用@Valid
,而是自己执行对身体的验证。
有更好的解决方案吗?
TIA Kibu
答案 0 :(得分:1)
Spring MVC框架本身并不认为它可行,因为框架通过使用不同的组件来处理request.json()
和其他类似@RequestBody
或@RequestParam
的框架。另外,两个部分都需要断开连接,因为您可能不希望验证方法的所有参数。
@PathVariable
由@RequestBody
处理,并从那里调用验证,并为参数或org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor
完成路径变量验证。
因此,在我看来,控制器方法的方法参数由框架一一处理,并且在逻辑上是断开的,因此这些验证不能合并在一起。
答案 1 :(得分:0)