使用validation校驗實體類中的字段
在新增的時候,controller層接口使用@RequestBody接收前端傳過來的參數,針對body中的參數,使用validation進行校驗,本篇記錄使用validation校驗BigDecimal格式的字段。
實體類
/**
* @author kozo
* @date 2021/4/13 22:53
*/
@Data
public class BigDecimalValidationEntity {
/**
* 這里amount類型是BigDecimal, @Digits, @DecimalMin也是針對數值的校驗
* 但是使用字符串傳值,校驗也能生效,只要字符串里面是數字就行
*/
@Digits(integer = 9, fraction=2, message = "amount格式不正確")
@DecimalMin(value = "0.00", message = "amount格式不正確")
@NotNull(message = "amount不為空")
private BigDecimal amount;
}
接口
@PostMapping("decimalTest")
public String decimalTest(@RequestBody @Validated BigDecimalValidationEntity entity) {
System.out.println(entity.getAmount());
return String.valueOf(entity.getAmount());
}
統一異常處理
這里只是簡單的返回注解中的字符串信息,在具體的業務中可以把這里的getDefaultMessage()
獲取的信息放到具體的包裝中返回。
@ControllerAdvice
@ResponseBody
public class MyExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public String methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
return e.getBindingResult().getFieldError().getDefaultMessage();
}
}
注解說明
-
@Digits(integer = 9, fraction=2, message = "amount格式不正確")
digit是數位的意思,這里的
integer
意思整數最多有幾位,fraction
意思小數最多有幾位,只是划定了傳入參數的范圍,前端傳值的時候可以用字符串(只要字符串里面都是數字就行)、數字; -
@DecimalMin(value = "0.00", message = "amount格式不正確")
decimal的最小值,傳入參數必須大於等於
value
里面的值; -
@NotNull(message = "amount不為空")
傳入參數不為空,對於BigDecimal格式,用
@NotNull
注解,如果傳參是空字符串或者只有空格的字符串,也無法通過校驗。 -
ps:如果字段的類型是
String
,建議使用@NotBlank
注解。