SpringBoot項目中validator做參數校驗不生效的問題


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM