spring MVC實(shí)踐需要注意的地方
使用spring mvc提供restful風(fēng)格的接口,實(shí)現(xiàn)前后端分離,后端只提供數(shù)據(jù)接口,而不做頁面渲染。因此可對接口做統(tǒng)一處理:
- 請求參數(shù)校驗(yàn)
- 響應(yīng)數(shù)據(jù)格式
- 全局異常處理
通過以上統(tǒng)一處理,開發(fā)人員可專注于業(yè)務(wù)處理,把校驗(yàn),異常響應(yīng)的邏輯分離出來。
請求參數(shù)校驗(yàn):
對于url中的參數(shù)
- 如果添加@RequestParam,但沒有傳遞該參數(shù),則拋出MissingServletRequestParameterException異常
- 如果添加@Max等注解,同時(shí)不滿足該條件,拋出ConstraintViolationException 或BindException異常
對于request body請求體中的參數(shù)
- Bean前添加@RequestBody,如果沒有請求體,拋出HttpMessageNotReadableException異常
- 在bean前添加@Validate注解,bean中屬性添加@Max,@NotNull等注解,即對響應(yīng)屬性進(jìn)行校驗(yàn),如果不滿足,拋出MethodArguementNotValidException
- @Validate內(nèi)可添加group,表明需要校驗(yàn)的操作,@Max可添加groups,當(dāng)groups包含group時(shí),則進(jìn)行校驗(yàn)。
- Bean中也可自定義注解,通過實(shí)現(xiàn)ConstraintValidator接口自定義校驗(yàn)邏輯。如果校驗(yàn)失敗,會(huì)拋出MethodArgumentNotValidException異常,
這些異常都被全局異常處理攔截,返回異常信息。
響應(yīng)數(shù)據(jù)格式:
- 建立統(tǒng)一響應(yīng)類JsonResp<T>,泛型T為業(yè)務(wù)響應(yīng)內(nèi)容,可為String,List,java bean等。定義屬性result表明響應(yīng)是否成功,響應(yīng)碼code,響應(yīng)碼信息msg。這里code及msg與全局異常處理的響應(yīng)枚舉類相對應(yīng)。
- 定義ResponseBodyhandler實(shí)現(xiàn)ResponseBodyAdvice接口,當(dāng)響應(yīng)類型為json時(shí),如果響應(yīng)類型為JsonResp,直接響應(yīng)給客戶端;如果不是,則new JsonResp,將響應(yīng)體set進(jìn)去,響應(yīng)給客戶端。
- 在controller的方法返回類型可任意定義String,List,java bean,在ResponseBodyhandler轉(zhuǎn)化為統(tǒng)一JsonResp形式。如果是流文件,則直接返回不會(huì)轉(zhuǎn)化為JsonResp形式。這樣可將響應(yīng)包裝成統(tǒng)一的JsonResp數(shù)據(jù)格式,便于前端處理。
全局異常處理
- 建立響應(yīng)枚舉類ResponseEnum,定義業(yè)務(wù)需要的響應(yīng)碼及響應(yīng)碼信息
- 建立自定義異常類BaseException,繼承運(yùn)行時(shí)異常RuntimeException,初始化時(shí)設(shè)置ResponseEnum。
- 建立異常捕捉類GlobalExceptionAspect,類中添加@RestCOntrollerAdvice注解,使用@Exceptional捕捉參數(shù)校驗(yàn)異常和自定義異常BaseException。
- 最外層捕捉Exception,捕捉未定義的異常
- 如果遇到業(yè)務(wù)報(bào)錯(cuò),throw new BaseException(ResponseEnum.xxx),拋出自定義異常,該異常由GlobalExceptionAspect切面捕捉,統(tǒng)一響應(yīng)至客戶端
統(tǒng)一定義異常響應(yīng)碼,便于查看
避免在業(yè)務(wù)代碼里進(jìn)行異常的響應(yīng),簡化代碼
這些統(tǒng)一處理的本質(zhì)是使用fliter或者aop攔截請求和響應(yīng)參數(shù)進(jìn)行通用邏輯處理,因此,可對請求進(jìn)行敏感詞過濾,參數(shù)加解密等處理,解耦業(yè)務(wù)邏輯。
以上就是spring MVC實(shí)踐需要注意的地方的詳細(xì)內(nèi)容,更多關(guān)于spring MVC實(shí)踐的資料請關(guān)注腳本之家其它相關(guān)文章!
- SpringMVC 如何使用注解完成登錄攔截
- 淺談springMVC中controller的幾種返回類型
- springMVC向Controller傳值出現(xiàn)中文亂碼的解決方案
- 解決springmvc使用@PathVariable路徑匹配問題
- 基于SpringMVC中的路徑參數(shù)和URL參數(shù)實(shí)例
- Spring MVC 框架搭建配置方法及詳解
- SpringMVC之簡單的增刪改查示例(SSM整合)
- Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例
- 詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳
- SpringMVC+MyBatis聲明式事務(wù)管理
相關(guān)文章
實(shí)戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之設(shè)置微服務(wù)接口開發(fā)模塊
這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之接口開發(fā)醫(yī)院設(shè)置微服務(wù)模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Java中Velocity快速對變量中的引號特殊字符進(jìn)行轉(zhuǎn)義
Velocity是一個(gè)基于Java的模板引擎,與Freemarker類似,這篇文章主要介紹了Java中Velocity如何對變量中的引號特殊字符進(jìn)行轉(zhuǎn)義,主要記錄一下在使用中碰到的要對引號特殊字符進(jìn)行轉(zhuǎn)義的問題,需要的朋友可以參考下2023-07-07
淺談java中replace()和replaceAll()的區(qū)別
這篇文章主要介紹了java中replace()和replaceAll()的區(qū)別,兩者都是常用的替換字符的方法,感興趣的小伙伴們可以參考一下2015-11-11
java中應(yīng)用Stack進(jìn)行算術(shù)運(yùn)算的操作
這篇文章主要介紹了java中應(yīng)用Stack進(jìn)行算術(shù)運(yùn)算的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Java通過反射將 Excel 解析成對象集合實(shí)例
這篇文章主要介紹了Java通過反射將 Excel 解析成對象集合實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java KindEditor粘貼圖片自動(dòng)上傳到服務(wù)器功能實(shí)現(xiàn)
這篇文章主要介紹了Java KindEditor粘貼圖片自動(dòng)上傳到服務(wù)器功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
spring接口通過配置支持返回多種格式(xml,json,html,excel)
這篇文章主要給大家介紹了關(guān)于spring接口如何通過配置支持返回多種格式(xml,json,html,excel)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
SpringBoot+Shiro+Redis+Mybatis-plus 實(shí)戰(zhàn)項(xiàng)目及問題小結(jié)
最近也是一直在保持學(xué)習(xí)課外拓展技術(shù),所以想自己做一個(gè)簡單小項(xiàng)目,于是就有了這個(gè)快速上手 Shiro 和 Redis 的小項(xiàng)目,說白了就是拿來練手調(diào)調(diào) API,然后做完后拿來總結(jié)的小項(xiàng)目,感興趣的朋友一起看看吧2021-04-04

