SpringBoot學習之全局異常處理設置(返回JSON)
SpringBoot學習——全局異常處理設置(返回JSON)
需求
- 現(xiàn)在習慣使用ajax的方式發(fā)起請求,所以經(jīng)常需要服務端返回一個json或者字符串。
- 控制全局的異常處理。
- 如果在單個方法中使用try,catch把方法包裹起來,工作量大,而且會異常的拋出而導致@Transactional注解的方法事務不會回滾。
說明
- 使用@ControllerAdvice注解
- 使用@ExceptionHandler注解
@ControllerAdvice
該注解是spring2.3以后新增的一個注解,主要是用來Controller的一些公共的需求的低侵入性增強提供輔助,作用于@RequestMapping標注的方法上。
@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 "服務器異常,請聯(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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 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 全局異常處理步驟詳解
相關文章
基于spring@aspect注解的aop實現(xiàn)過程代碼實例
這篇文章主要介紹了基于spring@aspect注解的aop實現(xiàn)過程代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
springboot如何解決非controller類引用service的問題
這篇文章主要介紹了springboot如何解決非controller類引用service的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時遇到的結(jié)點為空的問題詳解
這篇文章主要介紹了Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時遇到的結(jié)點為空的問題及解決辦法,需要的朋友們可以學習下。2019-09-09
JVM教程之Java代碼編譯和執(zhí)行的整個過程(二)
這篇文章主要介紹了JVM學習筆記第二篇,關于Java代碼編譯和執(zhí)行的整個過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
SpringBoot整合Mybatis自定義攔截器不起作用的處理方案
這篇文章主要介紹了SpringBoot整合Mybatis自定義攔截器不起作用的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

