spring參數傳遞和檢驗

1.背景

在spring請求時,要對參數進行檢查,之前一直使用以下方式來獲取參數,在參數特別多的時候,代碼很不簡潔。java

String userId= request.getParameter("userId");

後來使用註解@RequestParam代碼整潔了好多git

@RequestParam(value = "userId",required=true) String userId

後來對於參數比較多的狀況,使用一個bean來接收請求參數spring

@RequestMapping(value="/saveUser")
public String saveUser(User user) {}

對於比較複雜,有層級關係狀況,使用註解@RequestBody實現json

public String setUser(@RequestBody String userInfo) {
	//使用fastjson轉換爲實體類
}

無論使用以上的哪一種方式都要對參數進行校驗,若是一個個參數的檢查是否爲空,檢查邊界範圍,會致使代碼不少。使用@Valid註解來對參數進行校驗能讓代碼更整潔。app

2.使用

本文以實體類接收請求參數爲例簡單講解,validation一共有hibernate-validator,javax.validation和spring-validator三種註解,本文主要是簡單講解一下javax.validation的使用ui

@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;
}
  1. 使用@Valid註解進行參數檢查
  2. 在沒有使用BindingResult時,程序會拋出空指針等異常信息,不能返回自定義信息,網上查了一下須要使用BindingResult來處理Error信息,自定義返回錯誤數據。
  3. @NotNull,@Pattern,@Size,@Max,@Min,@Digits是我在項目中常用的註解

你們能夠關注個人公衆號:不知風在何處,相互溝通,共同進步。.net

相關文章
相關標籤/搜索