Jboot V3.7.5 增強 Jboot 的驗證方式,在 Jboot 之前的 @EmptyValidate、@RegexValidate 等基礎上,進一步基於 JSR 303 – Bean Validation 簡化了驗證方式,相比 Spring 更加優雅簡單。
@NotNull 驗證在 Controller (或 Service 等)中,我們可以直接透過 @NotNull 註解給 Controller 新增,例如:
public void test(@NotNull String para) { renderText("test6"); }
可能你說,在引數中新增 @NotNull 在 Spring 也支援呀,但是如果使用 @Size 等驗證,Spring 是無法直接給引數新增的,比如:
public void test(@Size(min=2,max=10) String para) { renderText("test6"); }
這個要做要求前端傳入的 para 引數的長度必須是在 2 ~ 10 直接。
@Size 驗證@Size 驗證,不僅僅可以驗證 String 資料的長度,也可以驗證 int long 等資料型別的值的大小範圍。比如:
public void test(@Size(min=2,max=10) int value) { renderText("test6"); }
這個要求 value 的值必須在 2 ~ 10 直接。
當然,我們還可以使用 @Size 來驗證 Map/List/陣列的長度,比如配合 @JsonBody 來接收前端傳入的值:
public void list(@Size(min=2,max=10) @JsonBody() List<MyBean> list) { System.out.println("list--->" + list); renderText("ok"); }
要求前度傳入的 MyBean Json 陣列的長度必須是在 2~10 之間。
@NotEmpty 驗證@NotEmpty 不僅僅可以驗證 String 型別不能為 null 和 空字串,也可以驗證 Map、List、陣列等不能為空,比如:
public void list(@NotEmpty() @JsonBody() List<MyBean> list) { System.out.println("list--->" + list); renderText("ok"); }
要求前端摻入的 MyBean Json 陣列必須有值。
@Valid 驗證@Valid 是針對整個 Java Bean 驗證,也可以對 JFinal 的 Model 進行驗證。的 MyBean Json 數
比如 MyBean 定義如下:
public class MyBean { private String id; @NotBlank(message = "密碼不能為空") private String password; @Size(min=0,max=2,message = "性別的值只能是 0 1 2") private int sex; @Min(value = 18,message = "未成年禁止入內") private Integer age; }
在 Controller 或者 Service 中,如下程式碼可以直接對 MyBean 進行驗證:
public void test(@Valid() MyBean bean) { renderText("test6"); }
如果 MyBean 是一個 JFinal 的 Model,我們只需要在 getter 方法添加註解即可。
除了以上的基本示例以外,Jboot 的驗證還支援了更多的驗證:
註解說明@NotNull限制必須不為null@DecimalMax(value)限制必須為一個不大於指定值的數字@DecimalMin(value)限制必須為一個不小於指定值的數字@Digits(integer,fraction)限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction@Max(value)限制必須為一個不大於指定值的數字@Min(value)限制必須為一個不小於指定值的數字@Pattern(value)限制必須符合指定的正則表示式@Size(max,min)限制字元長度必須在min到max之間@NotEmpty驗證註解的元素值不為null且不為空(字串長度不為0、集合大小不為0)@NotBlank驗證註解的元素值不為空(不為null、去除首位空格後長度為0),不同於@NotEmpty,@NotBlank只應用於字串且在比較時會去除字串的空格@Email驗證註解的元素值是Email,也可以透過正則表示式和flag指定自定義的email格式
在使用在寫驗證註解中,我們不僅僅在 Controller 裡進行對 http 請求資料進行驗證,一樣可以在 Service (provider)中對傳入的引數進行驗證。
在前端中,如果出現驗證失敗,會返回如下的 Json 內容(可以透過配置 ErrorRender 來修改掉如下的內容):
{ "throwable": "io.jboot.components.valid.ValidException: 必須小於或等於200", "errorMessage": "age max value is 200, but current value is 1001 at method: io.jboot.test.validate.ValidateController.test17(int)", "errorCode": 400, "state": "fail", "message": "必須小於或等於200"}
在 Service 中驗證失敗會向外丟擲 ValidException 異常。
開發文件:https://jbootprojects.gitee.io/docs/