1、SpringBoot项目中Controller的validator做参数校验不生效的问题
解决:
springboot 2.3之前的集成在spring-boot-starter-web
里了,所以不需要额外引入包
springboot 2.3之后需要引入 spring-boot-starter-validation
单个参数校验和Bean字段校验还是有点区别的:单个参数校验需要在参数上增加校验注解,并在类上标注@Validated
。
有一篇非常详细的 SpringBoot 中使用 validator 的教程,可以参考:使用Spring Validation优雅地校验参数
2、SpringBoot项目中controller之外使用validator做参数校验
参考:https://zhuanlan.zhihu.com/p/164752245
使用示例总结:
入参实体bean
@Data public class Request<T> { @Positive //要求数字成员必须大于0 private Long id; @NotNull private StatusEnum status; @Valid //嵌套类必须加这个注解才会递归校验里面的字段 private T data; } @Data public class TestParam { @Positive private Long subId; @NotEmpty private String name; }
1)controller层使用
-
@RequestMapping("/test") public Result<Boolean> test(@Valid Request<TestParam> req) { // xxx return Result.success(true); }
- controller层参数的注解用@Valid和@Validated都可生效,个人觉得最好还是统一用@Valid,避免后续记忆混淆出一些尴尬的问题,比如我。
2)service或其他spring管理的bean里使用
@Service @Validated public class TestService { public boolean test(Request<TestParam> req) { return true; } }