【发布时间】:2021-11-16 19:41:24
【问题描述】:
下面是“ControllerAdvice”,它充当多个微服务的全局异常处理程序。
// Custom Exception Handler
@ExceptionHandler(value = CustomException.class)
public ResponseEntity<ErrorResponse> customException(CustomException ex) {
ErrorResponse error = new ErrorResponse(ex.getErrorDescription(), ex.getErrorMessage());
return new ResponseEntity<>(error, ex.getStatus());
}
@ExceptionHandler(value = Exception.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse globalException(Exception ex) {
return new ErrorMessage("INTERNAL_SERVER_ERROR", "500");
}
现在对于我的一个微服务,我需要自定义来自上述异常处理程序的错误响应,即我需要将来自全局异常处理程序的“ErrorResponse”包装在另一个名为“ErrorResponseWrapper”的对象下
class ErrorResponseWrapper extends ErrorResponse {
String type;
// getter & setters
}
现在在我需要自定义错误响应的我的微服务中,我只是重写了 GlobalExceptionHandler 方法
@RestControllerAdvice
public class ControllerException extends GlobalExceptionHandler {
// This Works FINE...
@Override
public ErrorResponseWrapper globalException(Exception ex) {
//
ErrorResponse error = super.globalException(ex);
// New Response Wrapper
ErrorResponseWrapper wrapper = new ResponseWrapper();
wrapper.setType("SOMETHING");
return wrapper;
}
//Issue is here:-
// I get Compilation Error: ReturnType is Not Compatible with the GlobalException return type.
@Override
public ResponseEntity<ErrorResponseWrapper> customException(CustomException ex) {
ErrorResponse error = super.customException(ex).getBody();
// New Response Wrapper
ErrorResponseWrapper wrapper = new ResponseWrapper();
wrapper.setType("SOMETHING");
return new ResponseEntity<>(wrapper,ex.getStatus());
}
}
它与 First Overridden 方法一起工作正常,为什么它与 ResponseEntity 不同?有什么我做错了,或者我该如何做到这一点?
【问题讨论】:
标签: java spring spring-boot microservices