成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

springboot使用@ControllerAdvice注解全局處理系統(tǒng)異常

在日常的開發(fā)中,我們很多時候不停的使用try catch來處理異常,這樣的代碼重復(fù)性強(qiáng),通過@controllerAdvice 注解來實現(xiàn)可以全局定義異常,大大減少代碼的try catch。

import com.vicrab.api.bean.OperateCode;
import com.vicrab.api.server.model.OperateResult;
import org.apache.shiro.authc.AuthenticationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.ConversionNotSupportedException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、咸陽網(wǎng)站維護(hù)、網(wǎng)站推廣。

import java.io.IOException;

@ControllerAdvice
public class ControllerExceptionHandler {

private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);
private static final String logExceptionFormat = "Capture Exception By GlobalExceptionHandler: Code: %s Detail: %s";

//運(yùn)行時異常
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public OperateResult runtimeExceptionHandler(RuntimeException ex) {
    return exceptionFormat(OperateCode.EX_RUN, ex);
}

//空指針異常
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public OperateResult nullPointerExceptionHandler(NullPointerException ex) {
    return exceptionFormat(OperateCode.EX_NULL, ex);
}

//類型轉(zhuǎn)換異常
@ExceptionHandler(ClassCastException.class)
@ResponseBody
public OperateResult classCastExceptionHandler(ClassCastException ex) {
    return exceptionFormat(OperateCode.EX_CAST, ex);
}

//IO異常
@ExceptionHandler(IOException.class)
@ResponseBody
public OperateResult iOExceptionHandler(IOException ex) {
    return exceptionFormat(OperateCode.EX_IO, ex);
}

//未知方法異常
@ExceptionHandler(NoSuchMethodException.class)
@ResponseBody
public OperateResult noSuchMethodExceptionHandler(NoSuchMethodException ex) {
    return exceptionFormat(OperateCode.EX_NO_SUCH_METHOD, ex);
}

//數(shù)組越界異常
@ExceptionHandler(IndexOutOfBoundsException.class)
@ResponseBody
public OperateResult indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException ex) {
    return exceptionFormat(OperateCode.EX_INDEX_OUT_OF_BOUNDNS, ex);
}

//400錯誤
@ExceptionHandler({HttpMessageNotReadableException.class})
@ResponseBody
public OperateResult requestNotReadable(HttpMessageNotReadableException ex) {
    logger.error("400..requestNotReadable");
    return exceptionFormat(OperateCode.BAD_REQUEST, ex);
}

//400錯誤
@ExceptionHandler({TypeMismatchException.class})
@ResponseBody
public OperateResult requestTypeMismatch(TypeMismatchException ex) {
    logger.error("400..TypeMismatchException");
    return exceptionFormat(OperateCode.BAD_REQUEST, ex);
}

//400錯誤
@ExceptionHandler({MissingServletRequestParameterException.class})
@ResponseBody
public OperateResult requestMissingServletRequest(MissingServletRequestParameterException ex) {
    logger.error("400..MissingServletRequest");
    return exceptionFormat(OperateCode.BAD_REQUEST, ex);
}

//405錯誤
@ExceptionHandler({AuthenticationException.class})
@ResponseBody
public OperateResult request401(AuthenticationException ex) {
    return exceptionFormat(OperateCode.UNAUTHORIZED, ex);
}

//405錯誤
@ExceptionHandler({HttpRequestMethodNotSupportedException.class})
@ResponseBody
public OperateResult request405(HttpRequestMethodNotSupportedException ex) {
    return exceptionFormat(OperateCode.METHOD_NOT_ALLOWED, ex);
}

//406錯誤
@ExceptionHandler({HttpMediaTypeNotAcceptableException.class})
@ResponseBody
public OperateResult request406(HttpMediaTypeNotAcceptableException ex) {
    logger.error("406...");
    return exceptionFormat(OperateCode.NOT_ACCEPTABLE, ex);
}

//500錯誤
@ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
@ResponseBody
public OperateResult server500(RuntimeException ex) {
    logger.error("500...");
    return exceptionFormat(OperateCode.INTERNAL_SERVER_ERROR, ex);
}

//棧溢出
@ExceptionHandler({StackOverflowError.class})
@ResponseBody
public OperateResult requestStackOverflow(StackOverflowError ex) {
    return exceptionFormat(OperateCode.EX_STACK_OVER_FLOW, ex);
}

//其他錯誤
@ExceptionHandler({Exception.class})
@ResponseBody
public OperateResult exception(Exception ex) {
    return exceptionFormat(OperateCode.EX_OTHER, ex);
}

private <T extends Throwable> OperateResult exceptionFormat(OperateCode operateCode, T ex) {
    logger.error(String.format(logExceptionFormat, operateCode, ex));
    return OperateResult.exception(operateCode, ex);
}

}

@ExceptionHandler 用來定義異常的類型,這里面列舉了空指針異常等,其實還可以實現(xiàn)自定義異常,比如

public class MyException extends RuntimeException {

public MyException(String code, String msg) {
    this.code = code;
    this.msg = msg;
}

private String code;
private String msg;

// getter & setter

}

import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class MyControllerAdvice {

/**
 * 全局異常捕捉處理
 * @param ex
 * @return
 */
@ResponseBody
@ExceptionHandler(value = Exception.class)
public Map errorHandler(Exception ex) {
    Map map = new HashMap();
    map.put("code", 100);
    map.put("msg", ex.getMessage());
    return map;
}

@ResponseBody
@ExceptionHandler(value = MyException.class)
public Map myErrorHandler(MyException ex) {
    Map map = new HashMap();
    map.put("code", ex.getCode());
    map.put("msg", ex.getMsg());
    return map;
}

}

controller中拋出異常進(jìn)行測試。

@RequestMapping("/home")
public String home() throws Exception {

// throw new Exception("Sam 錯誤");
throw new MyException("101", "Sam 錯誤");

}

啟動應(yīng)用,訪問:http://localhost:8080/home

當(dāng)前題目:springboot使用@ControllerAdvice注解全局處理系統(tǒng)異常
文章位置:http://jinyejixie.com/article40/pddjho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計軟件開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
东山县| 海晏县| 富阳市| 庆云县| 南丹县| 尉犁县| 长海县| 石门县| 菏泽市| 犍为县| 大邑县| 兴山县| 和林格尔县| 河池市| 鄢陵县| 九台市| 南宁市| 舒城县| 镇远县| 仙游县| 安塞县| 宁都县| 甘洛县| 佛坪县| 宁化县| 安阳县| 武穴市| 雅安市| 佛山市| 叙永县| 肥城市| 河南省| 阿拉善左旗| 新干县| 闽清县| 枣强县| 巍山| 吉木萨尔县| 大宁县| 阿尔山市| 永嘉县|