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標注的方法上。
@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)文章
SpringBoot實現(xiàn)Mysql使用MD5進行密碼加密的示例
這篇文章主要介紹了SpringBoot實現(xiàn)Mysql使用MD5進行密碼加密的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Mybatis-Plus動態(tài)表名的實現(xiàn)示例
面對復(fù)雜多變的業(yè)務(wù)需求,動態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動態(tài)表名的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-07-07
Spring Security 自動踢掉前一個登錄用戶的實現(xiàn)代碼
這篇文章主要介紹了Spring Security 自動踢掉前一個登錄用戶的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

