欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案

 更新時間:2025年05月09日 08:54:27   作者:小楊同學~  
這篇文章主要介紹了SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

現(xiàn)在比較常用的方式是給前端返回JSON,但是有些時候程序出現(xiàn)一些異常,導致前端頁面報錯不是很友好,所以就需要對項目進行全局的異常捕獲,返回給前端固定的格式,進行友好的處理!

話不多說,開始寫代碼

一.全局異常捕獲

1.1 全局捕獲

@Slf4j
@RestControllerAdvice(annotations = {RestController.class})
public class BaseExceptionHandler {

    /**
     * <p>
     *       全局Base異常處理
     * </p>
     * @version 1.0.0
     * @author Dylan
     * @since 2020/2/27
     * @param e
     */
    @ExceptionHandler({BaseException.class,BusinessException.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public R customExceptionHandler(BaseException e) {
        sysLog();
        log.info("自定義異常 ---> {}",e);
        return R.error(e.getCode(),e.getMsg());
    }

    /**
     * <p>
     *       其他類型的異常處理
     * </p>
     * @version 1.0.0
     * @author Dylan
     * @since 2020/2/27
     * @param e
     */
    @ExceptionHandler({Exception.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public R customExceptionHandler(Exception e) {
        sysLog();
        log.info("未知的運行異常 ---> ",e);
        return R.error();
    }

    /**
     * <p>
     *       參數(shù)異常處理
     * </p>
     * @version 1.0.0
     * @author Dylan-haiji
     * @since 2020/2/28
     * @param exception
     */
    @ExceptionHandler(value= MethodArgumentNotValidException.class)
    public R methodNotValidHandler(MethodArgumentNotValidException exception) {
        sysLog();
        log.info("參數(shù)異常 ---> ",exception);
        List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
        return  R.error(fieldErrors.get(0).getDefaultMessage());
    }

    /**
     * <p>
     *       統(tǒng)一日志輸出
     * </p>
     * @version 1.0.0
     * @author Dylan-haiji
     * @since 2020/2/28
     * @param
     * @return void
     */
    private void sysLog(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String requestUri = request.getRequestURI();
        log.info("異常  method ---> {}",request.getMethod());
        log.info("異常 requestURI ---> {}",requestUri);
    }
    
}

1.2 基礎(chǔ)異常

public class BaseException extends RuntimeException{
    private Integer code;
    private String msg;

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

    public BaseException( String msg){
        this.code = 500;
        this.msg = msg;
    }

}

1.3 業(yè)務(wù)參數(shù)異常

public class BusinessException extends BaseException {

    public BusinessException(Integer code, String msg) {
        super(code, msg);
    }

    public BusinessException() {
        super(ConstantUtils.BUSINESS_DATA);
    }

    public BusinessException(String msg) {
        super(msg);
    }

}

二.驗證

通過上面的配置,我們可以進行全局的異常捕獲,接下來我們以參數(shù)驗證為例進行驗證是否可用!

2.1 定義實體類

public class Demo implements Serializable {
    
    @NotBlank(message = "請選擇時間")
    private String endDate;
   
    @NotBlank(message = "請選擇范圍類型")
    private String value;

}

2.2 定義接口

 @PostMapping(value = "list")
 public R getOverView(@RequestBody @Valid Demo demo){
    return R.ok();
 }

這是我們調(diào)用接口,直傳一個參數(shù)!達到了我們的預(yù)期效果

當然我們處理業(yè)務(wù)的時候也可進行異常的拋出,這樣也會進行全局的捕獲!

這樣的接口返回就非常的友好了! 

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java集合_淺談Iterable和Iterator的區(qū)別

    java集合_淺談Iterable和Iterator的區(qū)別

    下面小編就為大家?guī)硪黄猨ava集合_淺談Iterable和Iterator的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • java判斷中文字符串長度的簡單實例

    java判斷中文字符串長度的簡單實例

    下面小編就為大家?guī)硪黄猨ava判斷中文字符串長度的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java類的加載時機與過程

    Java類的加載時機與過程

    這篇文章主要介紹了Java類的加載時機與過程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • Spring?Boot?使用觀察者模式實現(xiàn)實時庫存管理的步驟

    Spring?Boot?使用觀察者模式實現(xiàn)實時庫存管理的步驟

    在現(xiàn)代軟件開發(fā)中,實時數(shù)據(jù)處理非常關(guān)鍵,本文提供了一個使用SpringBoot和觀察者模式開發(fā)實時庫存管理系統(tǒng)的詳細教程,步驟包括創(chuàng)建項目、定義實體類、實現(xiàn)觀察者模式、集成Spring框架、創(chuàng)建RESTful?API端點和測試應(yīng)用等,這將有助于開發(fā)者構(gòu)建能夠即時響應(yīng)庫存變化的系統(tǒng)
    2024-09-09
  • 最新評論