Spring MVC的@Valid
注释按预期与@RequestBody
arg一起工作,但它不与RequestEntity
arg一起使用。反正有没有让它运作?
答案 0 :(得分:1)
@Valid
不是来自Spring MVC,@Valid
依赖于包javax.validation;
,也许您的意思是@Validated
。不过,@RequestBody
和RequestEntity
在验证方面必须采用不同的方式。
@RequestBody
在Spring MVC Controller中用于注释请求的有效负载,但与此传入的有效负载对象的验证无关。
RequestEntity
用于包装实际有效负载以准备新请求。创建新的RequestEntity时不会应用任何验证。
答案 1 :(得分:0)
@Valid
注释与@RequestBody
一起使用,因为RequestResponseBodyMethodProcessor
(执行解析此处理程序参数的工作)会查找@Valid
的存在,如果是WebDataBinder
找到后,应用它在ResponseEntity
中找到的所有匹配验证器。
另一方面,HttpEntityMethodProcessor
参数由@Valid
解析,即使参数注释为{{1}},也不会执行验证。
当然,您可以通过调用您选择的验证器在处理程序方法中手动执行验证。这当然是可能的,尽管您可能想要考虑不同的方法。