【问题标题】:How to catch a lot of Jackson Exceptions in Spring?如何在 Spring 中捕获大量 Jackson 异常?
【发布时间】:2019-04-17 13:01:06
【问题描述】:

我有一个使用 ControllerAdviceExceptionHandlers 的 Spring Boot REST 应用程序。我使用Jackson 作为我的序列化/反序列化。我使用PostMan 作为我的客户端,当我发送不同的错误(如无效输入、错误的 JSON 语法等)时......杰克逊抛出了某些异常。目前,我有一个 (1) ExceptionHandler,它明确声明了每种类型的异常,例如 MismatchedInputExceptionInvalidFormatExceptionInvalidDentinitionException...这些都是 JsonProcsessingException 的形式。

有没有办法只捕获JsonProcessingException 及其所有孩子?我根据异常的类型返回不同的消息/状态代码。因此,如果引发与序列化相关的异常,我希望发回某个错误消息。

【问题讨论】:

  • 你有没有遇到过上面提到的一个异常?据我了解,spring 会用一些 spring 特定的例外来包装它。如果您只想捕获异常及其子异常,那么您只需捕获父异常即可捕获所有异常。
  • 你能展示你的代码吗?
  • @Jaiwo99 同意。已解决 [org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法从字符串“ee”反序列化 java.lang.Integer 类型的值:不是有效的整数值;嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“ee”反序列化类型为 java.lang.Integer 的值:不是 [Source: (PushbackInputStream) 处的有效整数值;行:8,列:23](通过引用链:

标签: spring-mvc spring-boot jackson


【解决方案1】:

您应该在@ControllerAdvice 类中创建此方法并验证您要管理哪些异常以返回不同的消息/状态代码。

@ExceptionHandler({InvalidFormatException.class, MismatchedInputException.class})
public void handlerIllegalArgumentException(JsonProcessingException exception,
                                            ServletWebRequest webRequest) throws IOException {
    if(exception instanceof InvalidFormatException) {
        LOGGER.error(exception.getMessage(), exception);
        webRequest.getResponse().sendError(HttpStatus.CONFLICT.value(), exception.getMessage());
    } else if (exception instanceof MismatchedInputException) {
        LOGGER.error(exception.getMessage(), exception);
        webRequest.getResponse().sendError(HttpStatus.BAD_REQUEST.value(), exception.getMessage());
    }
}

【讨论】:

  • 像魅力一样工作谢谢。顺便说一句,这也解决了 Kotlin 的问题,只需使用:@ExceptionHandler(MissingKotlinParameterException::class)
  • @DominikK 太棒了! :) 你可以在 stackoverflow 上关注我的个人资料,亲切的问候......
猜你喜欢
  • 2015-03-29
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
相关资源
最近更新 更多