1. 程式人生 > >處理json引數的註解,更方便的獲取請求引數

處理json引數的註解,更方便的獲取請求引數

@JSONParam需求描述

當請求的content-type為application/json時實現一下功能:

  1. 對請求體中的引數做required判斷
  2. 解析引數為指定型別
  3. 提供預設值

為什麼做@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時,對這些內容進行一一判斷和賦值操作,可避免上面提到的轉字串問題;

使用方法

  1. 在pom中新增maven依賴;
<dependency>
	<groupId>com.rongzhiweilai.extension</groupId>
	<artifactId>spring-annotation-extension</artifactId>
	<version>0.1.0-releases</version>
</dependency>
  • Tip: 釋出時版本號寫的略顯隨意,例項專案中也需要引入該版本
  1. 將類WebListenerConfiguration加入Spring容器;
@SpringBootApplication
@Import({com.rongzhiweilai.extension.config.WebListenerConfiguration.class})
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
  1. 示例專案 點選檢視示例專案程式碼

希望和大家交流意見,或是推薦