Spring Boot 數(shù)據(jù)校驗@Valid+統(tǒng)一異常處理的實現(xiàn)
1.先在你需要校驗的實體類上面加上所需要的注解
為了測試,我自己就簡單寫了。@NotNull 和 @NotBlank 不能為空
@Entity @Table(name = "User") @Data public class User implements Serializable { @Id @NotNull(message = "id不能為空") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @NonNull @NotBlank(message = "姓名不能為空") @Column(name = "name") private String name; public User() { } public User(Integer id,String name) { this.id=id; this.name = name; } }
下面是我從別的博客收集的所有參數(shù)校驗注解的使用規(guī)則方法
空檢查
@Null 驗證對象是否為null
@NotNull 驗證對象是否不為null, 無法查檢長度為0的字符串
@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大于0,只對字符串,且會去掉前后空格.
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.
Booelan檢查
@AssertTrue 驗證 Boolean 對象是否為 true
@AssertFalse 驗證 Boolean 對象是否為 false
長度檢查
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期檢查
@Past 驗證 Date 和 Calendar 對象是否在當(dāng)前時間之前
@Future 驗證 Date 和 Calendar 對象是否在當(dāng)前時間之后
@Pattern 驗證 String 對象是否符合正則表達(dá)式的規(guī)則
數(shù)值檢查
建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉(zhuǎn)換為int,但可以轉(zhuǎn)換為Stirng為"",Integer為null
@Min 驗證 Number 和 String 對象是否大等于指定的值
@Max 驗證 Number 和 String 對象是否小等于指定的值
@DecimalMax 被標(biāo)注的值必須不大于約束中指定的最大值. 這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度
@DecimalMin 被標(biāo)注的值必須不小于約束中指定的最小值. 這個約束的參數(shù)是一個通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度
@Digits 驗證 Number 和 String 的構(gòu)成是否合法
@Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。 @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message=“range.bean.wage”) private BigDecimal wage;
@Valid 遞歸的對關(guān)聯(lián)對象進(jìn)行校驗, 如果關(guān)聯(lián)對象是個集合或者數(shù)組,那么對其中的元素進(jìn)行遞歸校驗,如果是一個map,則對其中的值部分進(jìn)行校驗.(是否進(jìn)行遞歸驗證)
@CreditCardNumber信用卡驗證
@Email 驗證是否是郵件地址,如果為null,不進(jìn)行驗證,算通過驗證。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
2.在controller層加入@Valid注解
ServiceResult是我自己創(chuàng)建的異常返回類
添加用戶信息的方法
@PostMapping("/saveUser") public ServiceResult addUsers(@Valid @RequestBody User user){ return ServiceResult.success(userRepository.save(user)); }
3.創(chuàng)建統(tǒng)一處理異常的類
@RestControllerAdvice @ExceptionHandler(寫你想要攔截的異常類型)
這兩個注解必須要
第一個方法是校驗異常的統(tǒng)一處理
第二個是防止參數(shù)類型不一致的處理
當(dāng)然你也可以在里面處理其他異常。
@RestControllerAdvice public class BadRequestExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(BadRequestExceptionHandler.class); /** * 校驗錯誤攔截處理 * * @param exception 錯誤信息集合 * @return 錯誤信息 */ @ExceptionHandler(MethodArgumentNotValidException.class) public ServiceResult validationBodyException(MethodArgumentNotValidException exception){ BindingResult result = exception.getBindingResult(); if (result.hasErrors()) { List<ObjectError> errors = result.getAllErrors(); errors.forEach(p ->{ FieldError fieldError = (FieldError) p; logger.error("Data check failure : object{"+fieldError.getObjectName()+"},field{"+fieldError.getField()+ "},errorMessage{"+fieldError.getDefaultMessage()+"}"); }); } return ServiceResult.error("請?zhí)顚懻_信息"); } /** * 參數(shù)類型轉(zhuǎn)換錯誤 * * @param exception 錯誤 * @return 錯誤信息 */ @ExceptionHandler(HttpMessageConversionException.class) public ServiceResult parameterTypeException(HttpMessageConversionException exception){ logger.error(exception.getCause().getLocalizedMessage()); return ServiceResult.error("類型轉(zhuǎn)換錯誤"); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
聊一聊jdk1.8中的ArrayList 底層數(shù)組是如何擴容的
這篇文章主要介紹了聊一聊jdk1.8中的ArrayList 底層數(shù)組是如何擴容的,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java中將MultipartFile和File互轉(zhuǎn)的方法詳解
我們在開發(fā)過程中經(jīng)常需要接收前端傳來的文件,通常需要處理MultipartFile格式的文件,今天來介紹一下MultipartFile和File怎么進(jìn)行優(yōu)雅的互轉(zhuǎn),需要的朋友可以參考下2023-10-10高效數(shù)據(jù)傳輸?shù)拿孛芪淦鱌rotobuf的使用教程
Protobuf(Protocol?Buffers)是由?Google?開發(fā)的一種輕量級、高效的數(shù)據(jù)交換格式,它被用于結(jié)構(gòu)化數(shù)據(jù)的序列化、反序列化和傳輸,本文主要介紹了它的具體使用方法,需要的可以參考一下2023-05-05Mybatis-Plus saveBatch()批量保存失效的解決
本文主要介紹了Mybatis-Plus saveBatch()批量保存失效的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01SpringBoot整合redis實現(xiàn)輸入密碼錯誤限制登錄功能
遇到這樣的需求需要實現(xiàn)一個登錄功能,并且2分鐘之內(nèi)只能輸入5次錯誤密碼,若輸入五次之后還沒有輸入正確密碼,系統(tǒng)將會將該賬號鎖定1小時,這篇文章主要介紹了SpringBoot整合redis并實現(xiàn)輸入密碼錯誤限制登錄功能,需要的朋友可以參考下2024-02-02