第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

SpringBoot 全局異常處理

標簽:
Java SpringBoot

SpringBoot 全局异常处理

@Slf4j
@RestControllerAdvice
public class ExceptionController {

    /**
     * 校验错误拦截处理
     *
     * @param ex 异常
     * @return 返回值
     * StringBuilder sb = new StringBuilder();
     * for (FieldError error : ex.getBindingResult().getFieldErrors()) {
     * sb.append(error.getDefaultMessage()).append(";");
     * }
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public ApiMessage<Object> methodArgumentNotValidHandler(MethodArgumentNotValidException ex) {
        //按需重新封装需要返回的错误信息
        List<ArgumentInvalid> invalidArguments = new ArrayList<>();
        //解析原错误信息,封装后返回,此处返回非法的字段名称,原始值,错误信息
        ex.getBindingResult().getFieldErrors().forEach(fieldError -> invalidArguments.add(new ArgumentInvalid(fieldError.getField(), fieldError.getRejectedValue(), fieldError.getDefaultMessage())));
        return new ApiMessage<>(ExceptionCode.PARAMETER_ERROR, invalidArguments);
    }
  
    @ExceptionHandler(value = BindException.class)
    public ApiMessage<Object> bindExceptionHandler(BindException ex) {
        //按需重新封装需要返回的错误信息
        List<ArgumentInvalid> invalidArguments = new ArrayList<>();
        //解析原错误信息,封装后返回,此处返回非法的字段名称,原始值,错误信息
        ex.getBindingResult().getFieldErrors().forEach(fieldError -> invalidArguments.add(new ArgumentInvalid(fieldError.getField(), fieldError.getRejectedValue(), fieldError.getDefaultMessage())));
        return new ApiMessage<>(ExceptionCode.PARAMETER_ERROR, invalidArguments);
    }

    /**
     * HTTP请求方式不正确
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
    public ApiMessage<Object> httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex) {
        log.error("HTTP请求方式不正确:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 请求参数不全
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = MissingServletRequestParameterException.class)
    public ApiMessage<Object> missingServletRequestParameterException(MissingServletRequestParameterException ex) {
        log.error("请求参数不全:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 请求参数类型不正确
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = TypeMismatchException.class)
    public ApiMessage<Object> typeMismatchException(TypeMismatchException ex) {
        log.error("请求参数类型不正确:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 数据格式不正确
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = DataFormatException.class)
    public ApiMessage<Object> dataFormatException(DataFormatException ex) {
        log.error("数据格式不正确:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 非法输入或断言错误
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = IllegalArgumentException.class)
    public ApiMessage<Object> illegalArgumentException(IllegalArgumentException ex) {
        log.error("非法输入或断言错误:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 请求参数错误
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = ConstraintViolationException.class)
    public ApiMessage<Object> constraintViolationException(ConstraintViolationException ex) {
        log.error("请求参数错误:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 操作数据库出现异常
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(value = DataAccessException.class)
    public ApiMessage<Object> dataDoException(DataAccessException ex) {
        log.error("操作数据库出现异常:【{}】", ex.getMessage());
        return new ApiMessage<>(ex);
    }

    /**
     * 系统异常
     *
     * @param ex 异常
     * @return 返回值
     */
    @ExceptionHandler(Exception.class)
    public ApiMessage<Object> apiExceptionHandler(Exception ex) {
        //只打印15行的错误堆栈
        int count = 1;
        StringBuilder sb = new StringBuilder();
        for (StackTraceElement stackTraceElement : ex.getStackTrace()) {
            sb.append(stackTraceElement.toString());
//            if (count++ >= 30) {
//                break;
//            }
            sb.append("\n");
        }
        log.error("系统异常:【{}】", sb.toString());
        return new ApiMessage<>(ex);
    }

    /**
     * 自定义异常
     *
     * @param apiException 自定义异常
     * @return 返回值
     */
    @ExceptionHandler(ApiException.class)
    public ApiMessage<Object> apiException(ApiException apiException) {
        return new ApiMessage<>(apiException);
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode(callSuper = false)
    static class ArgumentInvalid {
        /**
         * 字段
         */
        private String field;
        /**
         * 字段值
         */
        private Object rejectedValue;
        /**
         * 默认值
         */
        private String defaultMessage;
    }
}
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消