SpringBoot學(xué)習(xí)之全局異常處理設(shè)置(返回JSON)
SpringBoot學(xué)習(xí)——全局異常處理設(shè)置(返回JSON)
需求
- 現(xiàn)在習(xí)慣使用ajax的方式發(fā)起請求,所以經(jīng)常需要服務(wù)端返回一個json或者字符串。
- 控制全局的異常處理。
- 如果在單個方法中使用try,catch把方法包裹起來,工作量大,而且會異常的拋出而導(dǎo)致@Transactional注解的方法事務(wù)不會回滾。
說明
- 使用@ControllerAdvice注解
- 使用@ExceptionHandler注解
@ControllerAdvice
該注解是spring2.3以后新增的一個注解,主要是用來Controller的一些公共的需求的低侵入性增強提供輔助,作用于@RequestMapping標(biāo)注的方法上。
@ExceptionHandler
該注解是配合@ExceptionHandler一起使用的注解,自定義錯誤處理器,可自己組裝json字符串,并返回到頁面。
代碼
創(chuàng)建一個全局異常處理類,如下:
如果向?qū)崿F(xiàn),不同的異常有不同的操作的話,只需要將 @ExceptionHandler的value的值不一樣就可以了,可以同時實現(xiàn)多個不同的異常處理,但不能出現(xiàn)包含狀態(tài)。
import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { /** * 所有異常報錯 * @param request * @param exception * @return * @throws Exception */ @ExceptionHandler(value=Exception.class) public String allExceptionHandler(HttpServletRequest request, Exception exception) throws Exception { exception.printStackTrace(); System.out.println("我報錯了:"+exception.getLocalizedMessage()); System.out.println("我報錯了:"+exception.getCause()); System.out.println("我報錯了:"+exception.getSuppressed()); System.out.println("我報錯了:"+exception.getMessage()); System.out.println("我報錯了:"+exception.getStackTrace()); return "服務(wù)器異常,請聯(lián)系管理員!"; } }
模擬一個拋出異常類,下例是拋出一個空指針異常和分母不為異常
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/exceptionTest") @ResponseBody public class ExceptionTest { @RequestMapping("/test") public String test(){ Message msg = null; msg.toString(); createException(); return "我是正常的"; } private void createException(){ int i = 5/0; } }
啟動Springboot,執(zhí)行結(jié)果
因為返回的是字符串,也可以使用json工具類來封裝,返回一個json字符串
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- springboot2.3之后hibernate-validator依賴缺失【踩坑】
- springboot 2.3之后消失的hibernate-validator解決方法
- SpringBoot 使用hibernate validator校驗
- springboot使用hibernate validator校驗方式
- SpringBoot實現(xiàn)全局異常處理方法總結(jié)
- SpringBoot配置GlobalExceptionHandler全局異常處理器案例
- Springboot之自定義全局異常處理的實現(xiàn)
- Springboot整合hibernate validator 全局異常處理步驟詳解
相關(guān)文章
基于spring@aspect注解的aop實現(xiàn)過程代碼實例
這篇文章主要介紹了基于spring@aspect注解的aop實現(xiàn)過程代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03springboot如何解決非controller類引用service的問題
這篇文章主要介紹了springboot如何解決非controller類引用service的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時遇到的結(jié)點為空的問題詳解
這篇文章主要介紹了Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時遇到的結(jié)點為空的問題及解決辦法,需要的朋友們可以學(xué)習(xí)下。2019-09-09JVM教程之Java代碼編譯和執(zhí)行的整個過程(二)
這篇文章主要介紹了JVM學(xué)習(xí)筆記第二篇,關(guān)于Java代碼編譯和執(zhí)行的整個過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03SpringBoot整合Mybatis自定義攔截器不起作用的處理方案
這篇文章主要介紹了SpringBoot整合Mybatis自定義攔截器不起作用的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09