相关疑难解决方法(0)

处理spring mvc中的包装异常

我有Spring MVC和jackson.当我开始一个不正确的请求时,杰克逊映射失败并被UnrecognizedPropertyException抛出.我想使用处理此异常

@ExceptionHandler
public String handle(UnrecognizedPropertyException e) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,Spring包含此异常,HttpMessageConversionException因此上面的代码不起作用.是否有可能在Spring中处理Jackson特定的(或一般的库特定的)异常?

java spring exception-handling exception spring-mvc

8
推荐指数
1
解决办法
4818
查看次数

如何在 Spring Exception Handler 中处理包装的异常?

上下文

在我们的应用程序中,我们已经开始使用,CompletableFuture但是当我们在现有代码中引入它时,我们有时必须调用get()(or join()) 方法。

这些方法将过程中发生的任何异常包装到一个ExecutionException(分别为 a CompletionException)中。

问题

默认情况下,Spring Web MVC 将通过返回 500 HTTP 状态来处理这些异常。相反,我们希望解开它们的原因,并将它们的处理委托给相应的自定义异常处理程序。

在 spring mvc处理包装异常时所说的相反,重新抛出原因不起作用¹,Spring 只是用它记录调试消息

另一方面,如何在 Spring @ExceptionHandler 中重新抛出异常作为 @ResponseStatus 注释的异常?太具体了,因为它假设我们事先知道异常的原因以及如何处理它。

我们找到的解决方案是定义 a @ControllerAdvice,将原因的处理委托回HandlerExceptionResolver如下所示:

@Autowired
HandlerExceptionResolver handlerExceptionResolver;

@ExceptionHandler(ExecutionException.class)
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, ExecutionException e) {
   return handlerExceptionResolver.resolveException(request, response, null, (Exception) e.getCause());
}
Run Code Online (Sandbox Code Playgroud)

然而,这看起来有点像黑客。我担心它可能会在 Spring 的未来版本中中断,或者由于某种原因HandlerExceptionResolver在上下文中不止一个。

这样做的正确方法是什么?

¹编辑:这曾经是该问题的公认答案,但在此期间似乎已被删除。

java spring exception-handling spring-mvc

5
推荐指数
0
解决办法
896
查看次数

标签 统计

exception-handling ×2

java ×2

spring ×2

spring-mvc ×2

exception ×1