1. 程式人生 > >SpringBoot項目統一處理異常

SpringBoot項目統一處理異常

param 統一 信息 hash int aop slf4 message class

package com.chitic.module.core.aop;

import com.chitic.module.core.constant.ChiticCoreConstant;
import com.chitic.module.core.enums.ChiticResponseCode;
import com.chitic.module.core.exception.ChiticException;
import com.chitic.module.core.response.ChiticResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest; @RestControllerAdvice(ChiticCoreConstant.BASE_PACKAGE) @Slf4j public class RestControllerExceptionAdvice {
   //此處可以攔截JSR303校驗不加BindingResult拋出的異常,自定義異常類,按照自己想要的 返回 @ExceptionHandler(BindException.
class) public ChiticResponse bindExceptionHandler(BindException ex) { BindingResult bindingResult
= ex.getBindingResult(); String errorMsg = ""; if (bindingResult != null && bindingResult.getFieldError() != null) { errorMsg = bindingResult.getFieldError().getDefaultMessage(); } return ChiticResponse.fail(ChiticResponseCode.PARAMS_VALUE_ERROR.getCode(), errorMsg); } @ExceptionHandler(MethodArgumentNotValidException.class) public ChiticResponse methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException ex) { BindingResult bindingResult = ex.getBindingResult(); String errorMsg = ""; if (bindingResult != null && bindingResult.getFieldError() != null) { errorMsg = bindingResult.getFieldError().getDefaultMessage(); } return ChiticResponse.fail(ChiticResponseCode.PARAMS_VALUE_ERROR.getCode(), errorMsg); } @ExceptionHandler(ChiticException.class) public ChiticResponse chiticExceptionHandler(HttpServletRequest request, ChiticException ex) { return ChiticResponse.fail(ex.getCode(), ex.getMessage()); } @ExceptionHandler(Exception.class) public ChiticResponse globalExceptionHandler(HttpServletRequest request, Exception ex) { ex.printStackTrace(); log.error(ex.getMessage()); return ChiticResponse.fail(ChiticResponseCode.SYSTEM_ERROR.getCode(), ChiticResponseCode.SYSTEM_ERROR.getMessage()); } @ExceptionHandler(Throwable.class) public ChiticResponse globalExceptionHandler(HttpServletRequest request, Throwable ex) { ex.printStackTrace(); log.error(ex.getMessage()); return ChiticResponse.fail(ChiticResponseCode.SYSTEM_ERROR.getCode(), ChiticResponseCode.SYSTEM_ERROR.getMessage()); } }

自定義異常類

package com.chitic.module.core.exception;

import com.chitic.module.core.enums.ChiticResponseCode;
import com.chitic.module.core.response.ChiticResponse;
import lombok.*;

/**
 * @author GX
 * @Description: 全局異常
 * @date 2019/5/11 10:18
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = false)
public class ChiticException extends RuntimeException {

    /**
     * 錯誤編號
     */
    private String code;

    /**
     * 錯誤信息
     */
    private String message;

    public static ChiticException of(ChiticResponse response) {
        return ChiticException.builder()
                .code(response.getCode())
                .message(response.getMessage())
                .build();
    }

    public static ChiticException of(String code, String message) {
        return ChiticException.builder()
                .code(code)
                .message(message)
                .build();
    }

    public static ChiticException of(ChiticResponseCode responseCode) {
        return ChiticException.builder()
                .code(responseCode.getCode())
                .message(responseCode.getMessage())
                .build();
    }


}

SpringBoot項目統一處理異常