一、前言
搭建springboot項目,我們都是采用的Restful接口,那么問題來了,當前端調用接口或者是其他項目調用時,我們不能單一靠調用方來控制參數的准確性,自己也要對一些非空的值進行判定。
二、方案
按照我們以往的做法,都是對request中的參數一個一個進行非空判定。
Model:
1 public class Order {
2
3
4 private Long userID;
5
6
7 private Long addressID;
8
9 private String comment;
10
11 }
Controller:
1 @PostMapping("/createOrders")
2 public String createOrders(@RequestBody Order dto) {
3 if(dto.getUserID==null)
4 return "userID不能為空";
5 if(dto.getAddressID==null)
6 return "addressID不能為空";
7 if(dto.getComment==null)
8 return "comment不能為空";
9 return "sucess";
10 }
這種做法首先是可取的,能達到我們的要求,但是這樣如果model字段過多,判定的就很多,相對維護起來就不是那么方便,其次增加controller層的負擔,既然我們來到spring4的時代,就應該適應使用注解的趨勢,下面是使用注解后的比變化。
Model:
public class Order {
@NotNull(message = "用戶ID不能為空")
private Long userID;
@NotNull(message = "收貨人地址id不能為空")
private Long addressID;
@NotBlank(message = "備注不為空")
private String comment;
}
Controller:
@PostMapping("/createOrders")
public String createOrders(@RequestBody @Valid Order dto, BindingResult results) {
if (results.hasErrors())
return results.getFieldError().getDefaultMessage();
return "success";
}
此時controller應該要加上@Valid ,否則不會驗證!
這樣我們就只需要在model字段上加上非空驗證和相應提示語就好了。
@Null 被注釋的元素必須為null
@NotNull 被注釋的元素不能為null
@AssertTrue 被注釋的元素必須為true
@AssertFalse 被注釋的元素必須為false
@Min(value) 被注釋的元素必須是一個數字,其值必須大於等於指定的最小值
@Max(value) 被注釋的元素必須是一個數字,其值必須小於等於指定的最大值
@DecimalMin(value) 被注釋的元素必須是一個數字,其值必須大於等於指定的最小值
@DecimalMax(value) 被注釋的元素必須是一個數字,其值必須小於等於指定的最大值
@Size(max,min) 被注釋的元素的大小必須在指定的范圍內。
@Digits(integer,fraction) 被注釋的元素必須是一個數字,其值必須在可接受的范圍內
@Past 被注釋的元素必須是一個過去的日期
@Future 被注釋的元素必須是一個將來的日期
@Pattern(value) 被注釋的元素必須符合指定的正則表達式。
@Email 被注釋的元素必須是電子郵件地址
@Length 被注釋的字符串的大小必須在指定的范圍內
@NotEmpty 被注釋的字符串必須非空
@Range 被注釋的元素必須在合適的范圍內
完結。
