前言
Spring是于2003 年興起的一個輕量級的Java 開發框架,非常受現在開發者的喜愛,下面這篇文章主要給大家介紹了關于spring參數傳遞與檢驗的相關內容,分享出供大家參考學習,下面來一起看看詳細的介紹:
一、背景
在spring請求時,要對參數進行檢查,以前一直使用如下方式來獲取參數,在參數特別多的時候,代碼很不簡潔。
1
|
String userId= request.getParameter( "userId" ); |
后來使用注解@RequestParam代碼整潔了好多
1
|
@RequestParam (value = "userId" ,required= true ) String userId |
后來對于參數比較多的情況,使用一個bean來接收請求參數
1
2
|
@RequestMapping (value= "/saveUser" ) public String saveUser(User user) {} |
對于比較復雜,有層級關系情況,使用注解@RequestBody實現
1
2
3
|
public String setUser( @RequestBody String userInfo) { //使用fastjson轉換為實體類 } |
不管使用以上的哪種方式都要對參數進行校驗,如果一個個參數的檢查是否為空,檢查邊界范圍,會導致代碼很多。使用@Valid注解來對參數進行校驗能讓代碼更整潔。
二、使用
本文以實體類接收請求參數為例簡單講解,validation一共有hibernate-validator,javax.validation和spring-validator三種注解,本文主要是簡單講解一下javax.validation
的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@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; } |
1
2
3
4
5
6
7
8
9
|
//使用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是我在項目中經常使用的注解
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://segmentfault.com/a/1190000010126444