Spring中的@RestControllerAdvice注解使用方法解析
@RestControllerAdvice注解使用
@RestControllerAdvice是Controller的增強(qiáng) 常用于全局異常的捕獲處理 和請(qǐng)求參數(shù)的增強(qiáng)
繼承@ControllerAdvice、@ResponseBody等注解 它返回的數(shù)據(jù)是JSON格式的。
異常案例
@RestControllerAdvice @Slf4j public class ControllerExceptionHandleAdvice { @ExceptionHandler public R handler(HttpServletRequest req, HttpServletResponse res, Exception e) { if (e instanceof NullPointerException) { log.error("請(qǐng)求的方法名為:{},發(fā)生空指針異常:{}", req.getRequestURI(), ExceptionUtils.getStackTrace(e)); return R.fail("執(zhí)行異常"); } else if (e instanceof DataIntegrityViolationException) { String stackTrace = ExceptionUtils.getStackTrace(e); log.error("請(qǐng)求的方法名為:{},數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)異常:{}", req.getRequestURI(), stackTrace); if (stackTrace.contains("唯一性約束")) { return R.fail("數(shù)據(jù)不能重復(fù)!"); } else if (stackTrace.contains("非空約束")) { return R.fail("必填項(xiàng)不能空!"); } else { return R.fail("數(shù)據(jù)庫(kù)異常"); } } else if (e instanceof SQLException) { log.error("請(qǐng)求的方法名為:{},數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)異常:{}", req.getRequestURI(), ExceptionUtils.getStackTrace(e)); return R.fail("數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)執(zhí)行異常"); } else { log.error("請(qǐng)求的方法名為:{},服務(wù)器代碼發(fā)生異常,請(qǐng)聯(lián)系管理員:{}", req.getRequestURI(), ExceptionUtils.getStackTrace(e)); return R.fail("服務(wù)器代碼發(fā)生異常,請(qǐng)聯(lián)系管理員"); } } }
請(qǐng)求參數(shù)案例
@Slf4j @RestControllerAdvice public class MyHandler { /** * 應(yīng)用到所有@RequestMapping注解方法,在其執(zhí)行之前初始化數(shù)據(jù)綁定器 * * @param binder */ @InitBinder public void initBinder(WebDataBinder binder) { log.info("初始化數(shù)據(jù)綁定器"); log.info(binder.getFieldDefaultPrefix()); log.info(binder.getFieldMarkerPrefix()); } /** * 把值綁定到Model中,使全局@RequestMapping可以獲取到該值 * @param model */ @ModelAttribute public void addAttributes(Model model) { log.info("添加name參數(shù)"); model.addAttribute("name", "allen"); } }
到此這篇關(guān)于Spring中的@RestControllerAdvice注解使用方法解析的文章就介紹到這了,更多相關(guān)@RestControllerAdvice注解使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java web實(shí)現(xiàn)簡(jiǎn)易收費(fèi)站
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)簡(jiǎn)易收費(fèi)站,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一2020-11-11基于Java事件監(jiān)聽(tīng)編寫(xiě)一個(gè)中秋猜燈謎小游戲
眾所周知,JavaSwing是Java中關(guān)于窗口開(kāi)發(fā)的一個(gè)工具包,可以開(kāi)發(fā)一些窗口程序,然后由于工具包的一些限制,導(dǎo)致Java在窗口開(kāi)發(fā)商并沒(méi)有太多優(yōu)勢(shì),不過(guò),在JavaSwing中關(guān)于事件的監(jiān)聽(tīng)機(jī)制是我們需要重點(diǎn)掌握的內(nèi)容,本文將基于Java事件監(jiān)聽(tīng)編寫(xiě)一個(gè)中秋猜燈謎小游戲2023-09-09JAVA超級(jí)簡(jiǎn)單的爬蟲(chóng)實(shí)例講解
下面小編就為大家?guī)?lái)一篇JAVA超級(jí)簡(jiǎn)單的爬蟲(chóng)實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10SpringCloud實(shí)現(xiàn)全鏈路灰度發(fā)布的示例詳解
灰度發(fā)布是指在軟件或服務(wù)發(fā)布過(guò)程中,將新版本的功能或服務(wù)以較小的比例引入到生產(chǎn)環(huán)境中,僅向部分用戶(hù)或節(jié)點(diǎn)提供新功能的一種發(fā)布策略,下面我們就來(lái)學(xué)習(xí)一下SpringCloud如何實(shí)現(xiàn)全鏈路灰度發(fā)布2023-11-11Java 線(xiàn)程的生命周期詳細(xì)介紹及實(shí)例代碼
這篇文章主要介紹了Java 線(xiàn)程的生命周期的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,幫助大家理解,需要的朋友可以參考下2016-10-10Java8如何使用Lambda表達(dá)式簡(jiǎn)化代碼詳解
這篇文章主要給大家介紹了關(guān)于Java8如何使用Lambda表達(dá)式簡(jiǎn)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別
這篇文章主要介紹了java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07