Restful接口统一异常处理

2020-03-15  本文已影响0人  Johar77

1.背景

目前微服务开发越来越多,接口之间的交互也越多。考虑到一些异常情况,接口需要对异常进行统一处理,规范异常处理的行为。

2.实现方式

通过@RestControllerAdvice,对Restful接口异常进行统一处理,以下是一个简单的实例。

@RestControllerAdvice

@Slf4j

public class GlobalExceptionTranslator {

@ExceptionHandler(MethodArgumentNotValidException.class)

public BaseResponsehandleError(MethodArgumentNotValidException e){

log.warn("Method Argument Not Valid", e);

        return BaseResponse

.builder()

.resultCode(ErrorCode.ERROR_PARAM_NOT_VALID.getErrorCode())

.message(ErrorCode.ERROR_PARAM_NOT_VALID.getMessage())

.build();

    }

@ExceptionHandler(MissingServletRequestParameterException.class)

public BaseResponsehandleError(MissingServletRequestParameterException e){

log.warn("Param Miss", e);

        return BaseResponse

.builder()

.resultCode(ErrorCode.ERROR_PARAM_MISS.getErrorCode())

.message(ErrorCode.ERROR_PARAM_MISS.getMessage())

.build();

    }

@ExceptionHandler(Throwable.class)

public BaseResponsehandlerError(Throwable e){

log.error("Unknown Error", e);

        return BaseResponse

.builder()

.resultCode(ErrorCode.ERROR_UNKNOWN.getErrorCode())

.message(ErrorCode.ERROR_UNKNOWN.getMessage())

.build();

    }

}

异常错误信息,也可以在封装到一个类进行统一处理,当然最好是实现多语言。

public enum ErrorCode {

OK(0, "success"),

    ERROR_PARAM_NOT_VALID(1, "Method Argument Not Valid"),

    ERROR_PARAM_MISS(2, "Method Argument Miss"),

    ERROR_UNKNOWN(9999, "Unknown Error");

    private int errorCode;

    private Stringmessage;

    ErrorCode(int errorCode, String message) {

this.errorCode = errorCode;

        this.message = message;

    }

public int getErrorCode() {

return errorCode;

    }

public StringgetMessage() {

return message;

    }

}

这样,在RestController中,可以直接抛出异常,由统一异常处理类进行处理,返回统一的格式的结果。

上一篇 下一篇

猜你喜欢

热点阅读