Java @jackson的例外处理程序';s无效格式异常
在spring boot应用程序中,我希望使用通用异常处理程序捕获和处理Java @jackson的例外处理程序';s无效格式异常,java,spring,spring-boot,jackson,Java,Spring,Spring Boot,Jackson,在spring boot应用程序中,我希望使用通用异常处理程序捕获和处理com.fasterxml.jackson.databind.exc.InvalidFormatException-异常,并在遇到异常时返回400 问题是,没有调用该异常的异常处理程序。而是返回一个偶然的500错误 我错过了什么? 这是否与InvalidFormatException是嵌套异常有关? 我该如何解决这个问题 代码异常处理程序 @ControllerAdvice(basePackages = "packe.pat
com.fasterxml.jackson.databind.exc.InvalidFormatException
-异常,并在遇到异常时返回400
问题是,没有调用该异常的异常处理程序。而是返回一个偶然的500错误
我错过了什么?
这是否与InvalidFormatException是嵌套异常有关?
我该如何解决这个问题
代码异常处理程序
@ControllerAdvice(basePackages = "packe.path.to.rest.controllers")
public class GeneralExceptionHandler {
// .. other working exception handlers...
@ExceptionHandler(InvalidFormatException.class)
public ResponseEntity<ErrorMessage> processJsonInvalidFormatException(InvalidFormatException e) {
log.error("Invalid Json Format Exceptioon occurred");
HttpStatus status = HttpStatus.BAD_REQUEST;
ErrorMessage msg = new ErrorMessage(
status.value(),
status.getReasonPhrase(),
e.getMessage()
);
return new ResponseEntity(msg, status);
}
而不是:
@ControllerAdvice(basePackages = "packe.path.to.rest.controllers")
试试看:
@ControllerAdvice
原因可能是异常被抛出了
jackson
包中,因此,在您自己的包之外。您可以扩展ResponseEntityExceptionHandler
并覆盖HandleHttpMessageNodeable
方法,如下所示:
@ControllerAdvice
public class GeneralExceptionHandler {
...
@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus httpStatus, WebRequest request) {
HttpStatus status = HttpStatus.BAD_REQUEST;
ErrorMessage msg = new ErrorMessage(
status.value(),
status.getReasonPhrase(),
ex.getMessage()
);
return new ResponseEntity(msg, status);
}
...
}
@ControllerAdvice
公共类GeneralExceptionHandler{
...
@凌驾
受保护的ResponseEntity HandleHttpMessageGenoTreadable(HttpMessageGenoTreadableException ex、HttpHeaders标头、HttpStatus HttpStatus、WebRequest请求){
HttpStatus status=HttpStatus.BAD_请求;
ErrorMessage msg=新的ErrorMessage(
status.value(),
status.getReasonPhrase(),
例如getMessage()
);
返回新的响应(消息、状态);
}
...
}
Ahh我明白了:纠正我的错误,但是如果将com.fasterxml.jackson.databind.exc
添加到basePackages参数中,它会起作用吗?我想是的。但我通常选择更通用的路径,比如:com.fasterxml.jackson
,遗憾的是,添加fasterxml包不起作用。然后我将尝试使用一个不受限制的处理程序。使用一个通用的@ControllerAdrive注释处理程序也不起作用。哼。。。你能分享完整的堆栈跟踪吗?错误似乎与解析某些内容有关。
@ControllerAdvice
public class GeneralExceptionHandler {
...
@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus httpStatus, WebRequest request) {
HttpStatus status = HttpStatus.BAD_REQUEST;
ErrorMessage msg = new ErrorMessage(
status.value(),
status.getReasonPhrase(),
ex.getMessage()
);
return new ResponseEntity(msg, status);
}
...
}