天天看點

JSR303參數校驗使用手記快速開始現身說法注解大全

參數校驗的必要性千篇一律,就不在多言了。

快速開始

1、引入jar包

springboot項目中引入jar包(有了springboot就是好,jsr303直接成了一個starter,不用再去擔心版本,jar包不對什麼的了)。

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

2、簡單的示例

-->構造一個簡單的POJO用于接收參數

public class UserVO implements Serializable {

	private static final long serialVersionUID = 1L;

	@NotBlank(message = "name不能為空")
	private String name;
	
	@NotNull(message = "年齡不能為空")
	@Min(value = 18, message = "未成年人禁止通路")
	private Integer age;

    //省略get/set.....
}
           

-->controller

@Controller
@RequestMapping("/test")
public class TestController {

	/**
	 * <p>jsr303測試
	 * */
	@RequestMapping(value = "/jsr303test")
	@ResponseBody
	public String jsr303Test(@Valid UserVO userVO, BindingResult result) {
		// 參數校驗
		if(result.hasErrors()) {
			List<FieldError> errors = result.getFieldErrors();
			Map<String, Object> map = new HashMap<>();
			for(FieldError error : errors) {
				map.put(error.getField(), error.getDefaultMessage());
			}
			return map.toString();
		}
		return "校驗通過,處理點其它的業務吧..";
	}

}
           

-->測試及結果

JSR303參數校驗使用手記快速開始現身說法注解大全
JSR303參數校驗使用手記快速開始現身說法注解大全
JSR303參數校驗使用手記快速開始現身說法注解大全

json接收參數同樣支援

JSR303參數校驗使用手記快速開始現身說法注解大全
JSR303參數校驗使用手記快速開始現身說法注解大全

現身說法

1、@Valid隻能校驗用POJO作為參數接收對象,參數傳遞方式可以是json;

2、單個參數驗證

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

3、JSR303的校驗結果都封裝在接口BindingResult中,BindingResult必須緊跟在被@Valid注解的參數後面;

反例:

BindingResult沒有緊跟在@Valid注解的參數後面;

JSR303參數校驗使用手記快速開始現身說法注解大全

4、需要校驗的POJO屬性,可以加入多個校驗;

JSR303參數校驗使用手記快速開始現身說法注解大全

5、建議使用包裝類替代基本資料類型,基本資料類型沒有注解支援非空判斷;

注解大全

注解 說明
@Null 被注解的屬性必須為Null
@NotNull 驗證對象是否不為null, 無法查檢長度為0的字元串
@NotBlank 檢查限制字元串是不是Null還有被Trim的長度是否大于0,隻對字元串,且會去掉前後空格,适用String
@NotEmpty 檢查限制元素是否為NULL或者是EMPTY,适用集合
@AssertTrue 驗證 Boolean 對象是否為 true  
@AssertFalse 驗證 Boolean 對象是否為 false
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的範圍之内
@Length 被注解的字元串長度
@Past 驗證 Date 和 Calendar 對象是否在目前時間之前
@Future 驗證 Date 和 Calendar 對象是否在目前時間之後
@Pattern 驗證 String 對象是否符合正規表達式的規則
@Min 驗證 Number 和 String(必須是數字類型) 對象是否大等于指定的值
@Max  驗證 Number 和 String(必須是數字類型) 對象是否小等于指定的值
@DecimalMax 被标注的值必須不大于限制中指定的最大值. 這個限制的參數是一個通過BigDecimal定義的最大值的字元串表示.小數存在精度
@DecimalMin 被标注的值必須不小于限制中指定的最小值. 這個限制的參數是一個通過BigDecimal定義的最小值的字元串表示.小數存在精度
@Digits 驗證 Number 和 String 的構成是否合法  ,示例:@Digits(integer=,fraction=) 驗證字元串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度
@Range 檢查數字是否介于min和max之間
@CreditCardNumber 信用卡驗證
@Email 驗證是否是郵件位址,如果為null,不進行驗證,算通過驗證
@URL 判斷該值是否是一個有效的URL, 如果給出了限制中的protocol, host 或 port 參數的話,那個被校驗的值需要和其比對

繼續閱讀