美文网首页
Restful接口统一异常处理

Restful接口统一异常处理

作者: Johar77 | 来源:发表于2020-03-15 10:55 被阅读0次

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中,可以直接抛出异常,由统一异常处理类进行处理,返回统一的格式的结果。

相关文章

网友评论

      本文标题:Restful接口统一异常处理

      本文链接:https://www.haomeiwen.com/subject/bbfqehtx.html