處理json引數的註解,更方便的獲取請求引數
阿新 • • 發佈:2019-05-17
@JSONParam需求描述
當請求的content-type為application/json時實現一下功能:
- 對請求體中的引數做required判斷
- 解析引數為指定型別
- 提供預設值
為什麼做@JSONParam(瞎掰)
-
自Java5.0版本引入註解之後,各種註解層出不窮。註解的使用讓程式碼簡潔優雅,更重要的是,提高程式碼重用,達到解耦的目的,利於程式碼的維護和修改。
-
對於Web後端框架來說,Spring 相關元件提供了大量註解,提高了開發速度,就拿@RequestParam來說,放在介面方法的引數前,通過幾個屬性,就能減少很多的引數校驗和型別轉換操作。
-
但是@RequestParam只應用於content-type為application/x-www-form-urlencoded(傳統表單方式)的場景,並不適用application/json情況。這時大多會使用@RequestBody代替@RequestParam來獲取一個JSON物件(或其他自定義物件),不過對這個JSON物件中的屬性和值仍是無感,所以必須在方法體中對這個JSON物件中的屬性進行一系列判斷。在寫這一系列判斷時,真是萬分感念@RequestParam的貼心與勤勞。
-
忍無可忍之下,決定自己動手寫一個能夠在application/json情況實現@RequestParam類似功能的註解@JSONParam,程式碼已經提交到github : https://github.com/championjing/spring-annotation-extension 檢視具體實現程式碼
不足之處
- 每個引數的處理都會請求體中的輸入流轉為字串,感覺會有更好的處理方式,但還沒想好;
想要的改進
- name屬性可以接受陣列,required、defaultValue也接受陣列,並與name對應,當返回值型別為JSON時,對這些內容進行一一判斷和賦值操作,可避免上面提到的轉字串問題;
使用方法
- 在pom中新增maven依賴;
<dependency>
<groupId>com.rongzhiweilai.extension</groupId>
<artifactId>spring-annotation-extension</artifactId>
<version>0.1.0-releases</version>
</dependency>
- Tip: 釋出時版本號寫的略顯隨意,例項專案中也需要引入該版本
- 將類WebListenerConfiguration加入Spring容器;
@SpringBootApplication
@Import({com.rongzhiweilai.extension.config.WebListenerConfiguration.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 示例專案 點選檢視示例專案程式碼
希望和大家交流意見,或是推薦