最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring boot 全局異常處理方法匯總

 更新時間:2019年10月16日 14:48:50   作者:全力以赴001  
這篇文章主要介紹了spring boot 全局異常處理方法匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

這篇文章主要介紹了spring boot 全局異常處理方法匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

import cn.sisyphe.framework.web.exception.DataException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageConversionException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
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;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;

import javax.servlet.http.HttpServletRequest;

/**
 * @author ming
 * @desc 全局異常處理類
 */
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

  /**
   * 缺失請求參數(shù)處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(MissingServletRequestParameterException.class)
  @ResponseBody
  public ResponseResult handleMissingServletRequestParameterException(MissingServletRequestParameterException e, HttpServletRequest request) {
    String message = "缺失請求參數(shù)" + e.getParameterName();
    return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e);
  }

  /**
   * 請求參數(shù)類型錯誤處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(MethodArgumentTypeMismatchException.class)
  @ResponseBody
  public ResponseResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) {
    String message = "請求參數(shù)" + e.getName() + "類型錯誤";
    return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e);
  }

  /**
   * 參數(shù)類型錯誤異常類型處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(HttpMessageConversionException.class)
  @ResponseBody
  public ResponseResult handleHttpMessageNotReadableException(HttpMessageConversionException e, HttpServletRequest request) {
    String message = "參數(shù)類型錯誤";
    return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e);
  }

  /**
   * 空指針異常處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(NullPointerException.class)
  @ResponseBody
  public ResponseResult handleNullPointerException(NullPointerException e, HttpServletRequest request) {
    String message = "空指針異常";
    return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e, true);
  }

  /**
   * MethodArgumentNotValidException 異常處理
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(MethodArgumentNotValidException.class)
  @ResponseBody
  public ResponseResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest request) {
    StringBuilder errorMsg = new StringBuilder();
    BindingResult re = e.getBindingResult();
    for (ObjectError error : re.getAllErrors()) {
      errorMsg.append(error.getDefaultMessage()).append(",");
    }
    errorMsg.delete(errorMsg.length() - 1, errorMsg.length());
    return ackTransfer(request, errorMsg.toString(), "-1", e, false);
  }

  /**
   * 綁定異常處理
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(BindException.class)
  @ResponseBody
  public ResponseResult handleBindException(BindException e,HttpServletRequest request){
    BindingResult result = e.getBindingResult();
    StringBuilder errorMsg = new StringBuilder();
    for (ObjectError error : result.getAllErrors()) {
      errorMsg.append(error.getDefaultMessage()).append(",");
    }
    errorMsg.delete(errorMsg.length() - 1, errorMsg.length());
    return ackTransfer(request, errorMsg.toString(), "-1", e, false);
  }


  /**
   * 自定義異常類型異常消息處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler({DataException.class})
  @ResponseBody
  public ResponseResult handleDataException(DataException e, HttpServletRequest request) {
    String message = e.getErrorMessage();
    String code = e.getErrorCode();
    return ackTransfer(request, code, message, e, true);
  }

  /**
   * 處理運行時異常
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler({RuntimeException.class})
  @ResponseBody
  public ResponseResult handleRuntimeException(RuntimeException e, HttpServletRequest request) {
    return ackTransfer(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value() + "", e, true);
  }

  /**
   * 默認(rèn)異常處理
   *
   * @param e
   * @param request
   * @return
   */
  @ExceptionHandler(Exception.class)
  @ResponseBody
  public ResponseResult handleException(Exception e, HttpServletRequest request) {
    return ackTransfer(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value() + "", e, true);
  }

  private ResponseResult ackTransfer(HttpServletRequest request, String message, String code, Exception e, boolean printStackTrace) {
    ResponseResult result = new ResponseResult();
    result.setCode(code);
    result.setMessage(message);
    if (printStackTrace) {
      log.error(message, e);
    } else {
      log.error(message);
    }
    return result;
  }

  private ResponseResult ackTransfer(HttpServletRequest request, String message, String code, Exception e) {
    return ackTransfer(request, message, code, e, false);
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot中request和response的加解密實現(xiàn)代碼

    springboot中request和response的加解密實現(xiàn)代碼

    這篇文章主要介紹了springboot中request和response的加解密實現(xiàn),在springboot中提供了RequestBodyAdviceAdapter和ResponseBodyAdvice,利用這兩個工具可以非常方便的對請求和響應(yīng)進(jìn)行預(yù)處理,需要的朋友可以參考下
    2022-06-06
  • SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化

    SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化

    這篇文章主要介紹了SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java深入分析動態(tài)代理

    Java深入分析動態(tài)代理

    動態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運行的時候確定的,客戶通過代理類來調(diào)用目標(biāo)對象的方法,是在程序運行時根據(jù)需要動態(tài)的創(chuàng)建目標(biāo)類的代理對象。本文將通過案例詳細(xì)講解一下Java動態(tài)代理的原理及實現(xiàn),需要的可以參考一下
    2022-07-07
  • Java UUID 五個版本的區(qū)別及使用場景小結(jié)

    Java UUID 五個版本的區(qū)別及使用場景小結(jié)

    在Java中,UUID是一個128位的唯一標(biāo)識符,廣泛應(yīng)用于生成唯一標(biāo)識符、分布式系統(tǒng)唯一鍵等場景,Java提供的java.util.UUID類支持五種UUID版本,每種具有不同的生成方式和使用場景,本文就來介紹一下如何使用,感興趣的可以了解一下
    2024-11-11
  • Java中Velocity快速對變量中的引號特殊字符進(jìn)行轉(zhuǎn)義

    Java中Velocity快速對變量中的引號特殊字符進(jìn)行轉(zhuǎn)義

    Velocity是一個基于Java的模板引擎,與Freemarker類似,這篇文章主要介紹了Java中Velocity如何對變量中的引號特殊字符進(jìn)行轉(zhuǎn)義,主要記錄一下在使用中碰到的要對引號特殊字符進(jìn)行轉(zhuǎn)義的問題,需要的朋友可以參考下
    2023-07-07
  • 詳解spring security之httpSecurity使用示例

    詳解spring security之httpSecurity使用示例

    這篇文章主要介紹了詳解spring security之httpSecurity使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringBoot如何使用Undertow做服務(wù)器

    SpringBoot如何使用Undertow做服務(wù)器

    這篇文章主要介紹了SpringBoot如何使用Undertow做服務(wù)器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring動態(tài)配置計時器觸發(fā)時間的實例代碼

    Spring動態(tài)配置計時器觸發(fā)時間的實例代碼

    這篇文章主要介紹了Spring動態(tài)配置計時器觸發(fā)時間的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • springboot 注冊服務(wù)注冊中心(zk)的兩種方式詳解

    springboot 注冊服務(wù)注冊中心(zk)的兩種方式詳解

    本文通過一個demo講述一下這兩種注冊方式,使用的是傳統(tǒng)的向zk注冊的方案。對springboot 注冊zk的相關(guān)知識感興趣的朋友一起看看吧
    2018-01-01
  • Springboot項目Maven依賴沖突的問題解決

    Springboot項目Maven依賴沖突的問題解決

    使用Spring Boot和Maven進(jìn)行項目開發(fā)時,依賴沖突是一個常見的問題,本文就來介紹一下Springboot項目Maven依賴沖突的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07

最新評論

遂溪县| 那曲县| 社会| 渑池县| 麻阳| 高邮市| 罗山县| 商洛市| 增城市| 大英县| 鄯善县| 丹阳市| 唐山市| 昭苏县| 阿拉尔市| 开平市| 长泰县| 贡嘎县| 疏附县| 富宁县| 珠海市| 刚察县| 郎溪县| 盐池县| 永吉县| 台东市| 平顺县| 湟源县| 邢台县| 文山县| 宜兰市| 舟曲县| 霍州市| 含山县| 临猗县| 上高县| 铜梁县| 乌兰县| 施甸县| 顺平县| 文水县|