SpringMVC實現REST API


JSON

使用Jackson jar包、@RequestBody、@ResponseBody注解,達到:

1. 請求JSON消息體映射為JAVA對象

2. 返回JAVA對象映射為JSON消息體

Step 1. 導入Jackson jar包:

 

 

Step 2. 在Spring MVC配置中加入annotation-driven,該配置可以確保@RequestBody、@ResponseBody、@Valid(用於請求校驗)注解可以被解析生效:

 

 

Step 3. 配置控制器掃描路徑:

 

 

 

Step 3. 此時編寫Controller,使用@RequestBody、@ResponseBody注解:

 

 

請求校驗

請求校驗一般包含兩個方面的校驗:

1. 請求參數的合法性校驗,例如格式校驗

 該類校驗可通過在類定義時使用JSR 303進行數據校驗,可使用Hibernate Validator,當數據校驗有問題時,將會拋出org.springframework.web.bind.MethodArgumentNotValidException。

2. 業務邏輯校驗,例如系統規定網上店鋪不可重名

 該類校驗,一般通過定制業務規則校驗代碼實現,可拋出自定義異常。

 

Step 1. 導入Hibernate Validator jar包:

 

 

Step 2. 在REST API交互使用到的類定義中使用JSR 303數據校驗注解,例如:

 

 

HTTP Status Code

1. 在Controller的目標方法上通過@ResponseStatus定義成功碼,例如需要PUT方法成功時返回204而不是200:

 

 

2. 對於通過定制的業務邏輯校驗拋出自定義異常的場景,可以在自定義異常類上加上@ResponseStatus定義Status Code,例如:

 

 

3. 對於JSR 303進行的數據校驗,返回的是400 Bad Request異常,這個一般無需額外定制。

4. 由於本例中要實現:

當異常出現時,需要返回具體的錯誤提示信息給客戶端(見“自定義錯誤”章節),實際上異常發生時返回的HTTP Status Code也是在該章節的自定義ExceptionHandler類中指定的。

自定義錯誤

由於HTTP Status Code只能給出一個籠統的錯誤提示,往往在實際項目中,當錯誤發生時,需要根據不同的錯誤返回不同的錯誤信息,一般包含錯誤碼和錯誤描述。

對於業務規則校驗拋出的自定義異常和JSR 303拋出的MethodArgumentNotValidException,可以定制ExceptionHandler類來進行處理,在其中直接返回自定義的ErrorInfo對象或者通過返回Map的方式實現:

 

 

 在上例中,在對應的方法上也加上了@ResponseStatus指定了返回的HTTP Status Code,實際上自定義異常類中使用@ResponseStatus注解標識的HTTP Status Code和JSR 303數據校驗未通過時設定的HTTP Status Code,都會在此處被覆蓋,如果在此處不設置@Response Status,很不幸將會默認返回表示正確的HTTP Status Code,例如200。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM