1.背景
在spring請求時,要對引數進行檢查,以前一直使用如下方式來獲取引數,在引數特別多的時候,程式碼很不簡潔。
String userId= request.getParameter("userId");
後來使用註解@RequestParam程式碼整潔了好多
@RequestParam(value = "userId",required=true) String userId
後來對於引數比較多的情況,使用一個bean來接收請求引數
@RequestMapping(value="/saveUser")
public String saveUser(User user) {}
對於比較複雜,有層級關係情況,使用註解@RequestBody實現
public String setUser(@RequestBody String userInfo) {
//使用fastjson轉換為實體類
}
不管使用以上的哪種方式都要對引數進行校驗,如果一個個引數的檢查是否為空,檢查邊界範圍,會導致程式碼很多。使用@Valid註解來對引數進行校驗能讓程式碼更整潔。
2.使用
本文以實體類接收請求引數為例簡單講解,validation一共有hibernate-validator,javax.validation和spring-validator三種註解,本文主要是簡單講解一下javax.validation的使用
@RequestMapping(value="/saveUser")
@ResponseBody
public JSONObject saveUser(@Valid User user, BindingResult result){
JSONObject jsonObject = new JSONObject();
//判斷是否檢驗錯誤資訊
if(result.hasErrors()){
//取出第一條錯誤資訊返回
List<FieldError> list = result.getFieldErrors();
String errorMessage = CollectionUtils.isEmpty(list)?
"引數錯誤!":list.get(0).getDefaultMessage();
jsonObject.put("errorMessage",errorMessage );
return jsonObject;
}
//saveUser儲存使用者資訊模組省略
jsonObject.put("errorMessage","success");
return jsonObject;
}
//使用lombok
@Data
public class User implements Serializable{
@NotNull(message = "使用者id不能為空")
@Pattern(regexp="^\d{12}$",message = "使用者id非法")
private String userId;
private String userName;
private int age;
}
-
使用@Valid註解進行引數檢查
-
在沒有使用BindingResult時,程式會丟擲空指標等異常資訊,不能返回自定義資訊,網上查了一下需要使用BindingResult來處理Error資訊,自定義返回錯誤資料。
-
@NotNull,@Pattern,@Size,@Max,@Min,@Digits是我在專案中經常使用的註解
大家可以關注我的公眾號:不知風在何處,相互溝通,共同進步。