使用validation校驗BigDecimal


使用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注解。

一些測試驗證(可以不用看了)

image-20210414101611557

image-20210414101630713

image-20210414101651646

image-20210414101719299

image-20210414101753468

image-20210414101814597

image-20210414101832004


免責聲明!

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



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