前言
對于任何一個應(yīng)用而言邓厕,客戶端做的數(shù)據(jù)有效性驗(yàn)證都不是安全有效的,而數(shù)據(jù)驗(yàn)證又是一個企業(yè)級項(xiàng)目架構(gòu)上最為基礎(chǔ)的功能模塊洽糟,這時候就要求我們在服務(wù)端接收到數(shù)據(jù)的時候也對數(shù)據(jù)的有效性進(jìn)行驗(yàn)證炉菲。
JSR-303
JSR 是Java Specification Requests 的縮寫,是指向 JCP(Java Community Process) 提出新增一個標(biāo)準(zhǔn)化技術(shù)規(guī)范的正式請求坤溃。
任何人都可以提交 JSR拍霜,以向 Java 平臺增添新的 API 和服務(wù),已審核通過的規(guī)范涉及 Java 各個領(lǐng)域薪介,有興趣可以了解一下祠饺。
Bean Validation 是一個運(yùn)行時的數(shù)據(jù)驗(yàn)證框架,為 JavaBean 驗(yàn)證定義了相應(yīng)的元數(shù)據(jù)模型和 API汁政。
默認(rèn)的元數(shù)據(jù)是 Java Annotations道偷,當(dāng)然也可以使用 XML 可以對已存在的元數(shù)據(jù)信息進(jìn)行覆蓋和擴(kuò)展。
在應(yīng)用中通過使用 Bean Validation 或是你自己定義的 constraint记劈,例如 @NotNull, @Max, @ZipCode勺鸦, 就可以確保數(shù)據(jù)模型的正確性。
constraint 可以注解到字段目木,getter 方法祝旷,類或者接口上面。對于一些特定的需求嘶窄,用戶可以很容易的開發(fā)定制化的 constraint怀跛。
檢驗(yàn)注解
JSR提供的校驗(yàn)注解:
@Null 被注釋的元素必須為 null
@NotNull 被注釋的元素必須不為 null
@AssertTrue 被注釋的元素必須為 true
@AssertFalse 被注釋的元素必須為 false
@Min(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值
@Max(value) 被注釋的元素必須是一個數(shù)字柄冲,其值必須小于等于指定的最大值
@DecimalMin(value) 被注釋的元素必須是一個數(shù)字吻谋,其值必須大于等于指定的最小值
@DecimalMax(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值
@Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內(nèi)
@Digits (integer, fraction) 被注釋的元素必須是一個數(shù)字现横,其值必須在可接受的范圍內(nèi)
@Past 被注釋的元素必須是一個過去的日期
@Future 被注釋的元素必須是一個將來的日期
@Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達(dá)式
Hibernate Validator提供的校驗(yàn)注解:
@NotBlank(message =) 驗(yàn)證字符串非null漓拾,且trim后長度必須大于0
@Email 被注釋的元素必須是電子郵箱地址
@Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內(nèi)
@NotEmpty 被注釋的字符串的必須非空
@Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內(nèi)
使用
實(shí)體類
package com.mrcoder.sbexceptionvalidator.model;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Setter
@Getter
public class Person {
@NotNull(message = "id非空")
private Integer id;
@NotBlank(message = "name非空")
private String name;
}
控制類
@PostMapping("/add")
public ResponseInfo add(@Valid @RequestBody Person person) {
return ResponseInfo.success("success");
}
項(xiàng)目地址
https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-exception-validator