Bean类型验证网上很多,但是基本类型的验证直接使用下面的方式是无效的。
@GetMapping("t2")
public ResponseEntity<String> t2(@Validated @Size(min = 5, max = 9) String user) {
return new ResponseEntity<>("t2", HttpStatus.OK);
}
需要在类上使用@Validated才能生效。
@RestController
@RequestMapping("/test")
@Validated
public class ResTestController {
@GetMapping("t2")
public ResponseEntity<String> t2( @Size(min = 5, max = 9) String user) {
return new ResponseEntity<>("t2", HttpStatus.OK);
}
}
跟踪下源码,两者的验证地方不同。
Bean的验证和org.springframework.web.method.annotation.ModelAttributeMethodProcessor#validateIfApplicable相关,大体流程是在基本类型验证前,参数需要转换为Bean,这个时候做的验证。
基本类型的验证,在类上使用@Validated后,框架会使用AOP来验证,这个org.springframework.validation.beanvalidation.MethodValidationInterceptor的注释说的很清楚。具体验证代码也在这个类里面,可以自行阅读。