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; } }