@Valid注释适用于@RequestBody但不适用于RequestEntity

时间:2018-06-06 10:59:40

标签: spring spring-mvc spring-boot jsr349

Spring MVC的@Valid注释按预期与@RequestBody arg一起工作,但它不与RequestEntity arg一起使用。反正有没有让它运作?

2 个答案:

答案 0 :(得分:1)

@Valid不是来自Spring MVC,@Valid依赖于包javax.validation;,也许您的意思是@Validated。不过,@RequestBodyRequestEntity在验证方面必须采用不同的方式。

@RequestBody在Spring MVC Controller中用于注释请求的有效负载,但与此传入的有效负载对象的验证无关。

RequestEntity用于包装实际有效负载以准备新请求。创建新的RequestEntity时不会应用任何验证。

答案 1 :(得分:0)

@Valid注释与@RequestBody一起使用,因为RequestResponseBodyMethodProcessor(执行解析此处理程序参数的工作)会查找@Valid的存在,如果是WebDataBinder找到后,应用它在ResponseEntity中找到的所有匹配验证器。

另一方面,HttpEntityMethodProcessor参数由@Valid解析,即使参数注释为{{1}},也不会执行验证。

当然,您可以通过调用您选择的验证器在处理程序方法中手动执行验证。这当然是可能的,尽管您可能想要考虑不同的方法。