1. 程式人生 > 實用技巧 >JSR303引數驗證註解

JSR303引數驗證註解

1 JSR303引數驗證註解

JSR(Java 規範提案)是Java Specification Requests的縮寫,是指向JCP(Java Community Process)提出新增一個標準化技術規範的正式請求。

2 應用

2.1 註解型別

註解 作用型別 解釋
@NotNull 任何型別 屬性不能為null
@NotEmpty 集合 集合不能為null,且size大於0
@NotBlanck 字串、字元 字元類不能為null,且去掉空格之後長度大於0
@AssertTrue Boolean、boolean 布林屬性必須是true
@Min 數字型別(原子和包裝) 限定數字的最小值(整型)
@Max 同@Min 限定數字的最大值(整型)
@DecimalMin 同@Min 限定數字的最小值(字串,可以是小數)
@DecimalMax 同@Min 限定數字的最大值(字串,可以是小數)
@Range 數字型別(原子和包裝) 限定數字範圍(長整型)
@Length 字串 限定字串長度
@Size 集合 限定集合大小
@Past 時間、日期 必須是一個過去的時間或日期
@Future 時期、時間 必須是一個未來的時間或日期
@Email 字串 必須是一個郵箱格式
@Pattern 字串、字元 正則匹配字串

2.2 程式碼舉例

1.在springboot各個版本中,有的版本spring-boot-starter-web 依賴中沒有org.springframework.boot:spring-boot-starter-validation這個依賴所以需要手動匯入,有的話就不需要了

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

2.程式碼

domain

package com.yh.jsr303.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * @author yh
 * @date 2020/8/10 11:03
 * @description:
 */
@Data
public class Person {

    @NotNull(message = "id不能為空")
    private Long id;

    @Future(message = "需要一個將來日期") // 只能是將來的日期
    @DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式化轉換
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")//格式化接收的日期
    private LocalDate date;

    @DecimalMin(value = "0.1") // 最小值0.1元
    @DecimalMax(value = "10000.00") // 最大值10000元
    private BigDecimal doubleValue;

    @Min(value = 0, message = "最小值為0") // 最小值為1
    @Max(value = 127, message = "最大值為127") // 最大值88
    private Integer integer;

    @Range(min = 1, max = 100, message = "範圍為1至100") // 限定範圍
    private Long range;

    // 郵箱驗證
    @Email(message = "郵箱格式錯誤")
    private String email;

    @Size(min = 10, max = 16, message = "字串長度要求10到16之間。")
    private String size;
}

controller

package com.yh.jsr303.controller;

import com.yh.jsr303.domain.Person;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * @author yh
 * @date 2020/8/10 11:26
 * @description:
 */
@RestController
@RequestMapping("/person")
public class PersonController {
    //	然後在controller的每個介面中使用@Valid和BindingResult類
    // @Valid註解用於驗證一個入參,驗證之後的訊息繫結到BindingResult類中:
    public ResponseEntity<Void> queryPerson(@Valid Person person, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            //丟擲異常或者返回  bindingResult.getFieldError().getDefaultMessage();
        }
        return ResponseEntity.ok().build();
    }
}