spring學(xué)習(xí)之參數(shù)傳遞與檢驗詳解
前言
Spring是于2003 年興起的一個輕量級的Java 開發(fā)框架,非常受現(xiàn)在開發(fā)者的喜愛,下面這篇文章主要給大家介紹了關(guān)于spring參數(shù)傳遞與檢驗的相關(guān)內(nèi)容,分享出供大家參考學(xué)習(xí),下面來一起看看詳細的介紹:
一、背景
在spring請求時,要對參數(shù)進行檢查,以前一直使用如下方式來獲取參數(shù),在參數(shù)特別多的時候,代碼很不簡潔。
String userId= request.getParameter("userId");
后來使用注解@RequestParam代碼整潔了好多
@RequestParam(value = "userId",required=true) String userId
后來對于參數(shù)比較多的情況,使用一個bean來接收請求參數(shù)
@RequestMapping(value="/saveUser") public String saveUser(User user) {}
對于比較復(fù)雜,有層級關(guān)系情況,使用注解@RequestBody實現(xiàn)
public String setUser(@RequestBody String userInfo) { //使用fastjson轉(zhuǎn)換為實體類 }
不管使用以上的哪種方式都要對參數(shù)進行校驗,如果一個個參數(shù)的檢查是否為空,檢查邊界范圍,會導(dǎo)致代碼很多。使用@Valid注解來對參數(shù)進行校驗?zāi)茏尨a更整潔。
二、使用
本文以實體類接收請求參數(shù)為例簡單講解,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)? "參數(shù)錯誤!":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注解進行參數(shù)檢查
- 在沒有使用BindingResult時,程序會拋出空指針等異常信息,不能返回自定義信息,網(wǎng)上查了一下需要使用BindingResult來處理Error信息,自定義返回錯誤數(shù)據(jù)。
- @NotNull,@Pattern,@Size,@Max,@Min,@Digits是我在項目中經(jīng)常使用的注解
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Java?SpringBoot?獲取接口實現(xiàn)類匯總
這篇文章主要介紹了Java?SpringBoot?獲取接口實現(xiàn)類匯總,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09java使用mysql預(yù)編譯語句查詢優(yōu)勢及示例詳解
這篇文章主要為大家介紹了java使用mysql預(yù)編譯語句的優(yōu)勢特點及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06可能是全網(wǎng)最詳細的springboot整合minio教程
MinIO是全球領(lǐng)先的對象存儲先鋒,在標(biāo)準(zhǔn)硬件上,讀/寫速度上高達183 GB/秒和171 GB/秒,下面這篇文章主要給大家介紹了關(guān)于springboot整合minio的相關(guān)資料,這個教程可能是全網(wǎng)最詳細的,需要的朋友可以參考下2022-06-06java日期格式化YYYY-MM-dd遇坑指南小結(jié)
本文主要介紹了java日期格式化YYYY-MM-dd遇坑指南小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08application作用域?qū)崿F(xiàn)用戶登錄擠掉之前登錄用戶代碼
這篇文章主要介紹了application作用域?qū)崿F(xiàn)用戶登錄擠掉之前登錄用戶代碼,具有一定參考價值,需要的朋友可以了解下。2017-11-11SpringBoot整合Quartz及異步調(diào)用的案例
Quartz是一個完全由java編寫的開源作業(yè)調(diào)度框架、它的簡單易用受到業(yè)內(nèi)人士的一致好評,這篇文章主要介紹了SpringBoot整合Quartz及異步調(diào)用,需要的朋友可以參考下2023-03-03