JSR303引數驗證註解
阿新 • • 發佈:2020-08-10
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 | 時期、時間 | 必須是一個未來的時間或日期 |
字串 | 必須是一個郵箱格式 | |
@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();
}
}