【问题标题】:Spring-boot handle NoHandlerException in @ControllerAdvice@ControllerAdvice 中的 Spring-boot 处理 NoHandlerException
【发布时间】:2020-01-17 09:37:50
【问题描述】:

我想在 Springboot 应用程序中处理 NoHandlerException 并返回自定义错误消息。我将以下内容添加到我的 application.properties 并尝试覆盖错误消息。

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

错误没有命中 @ControllerAdvice... 它在 defaulthandlerexceptionresolver 中处理。有什么想法吗?

【问题讨论】:

  • 您能在处理程序上使用@Order(Ordered.HIGHEST_PRECEDENCE),如果可行,请告诉我。
  • 它在我的控制器建议中不起作用,“ResponseEntityExceptionHandler”已扩展。所以我没有使用@ExceptionHandler,除非我必须重写该方法。
  • OK 然后把这些注释放在头上:@Order(Ordered.HIGHEST_PRECEDENCE) @ControllerAdvice
  • rest apis的全局异常处理可以参考github.com/s2agrahari/global-excpetion-handler-spring-boot。
  • 谢谢,@JonathanJohx,它奏效了。您可以将其添加为答案吗?所以这对其他人也很有用。但是,非常感谢您为我节省了很多时间...

标签: spring-boot spring-mvc exception handlerexceptionresolver


【解决方案1】:

将@Order(Ordered.HIGHEST_PRECEDENCE)和@ControllerAdvice放在异常处理程序的头部,意味着:

@ControllerAdvice

为声明@ExceptionHandler、@InitBinder 或@ModelAttribute 方法以在多个@Controller 类之间共享的类的@Component 特化。

@Order

定义带注释的组件的排序顺序。如果我们将其设为 Ordered.HIGHEST_PRECEDENCE,这是对最高优先级值有用的常量。

代码应该如下所示:

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class ExceptionsHandler extends ResponseEntityExceptionHandler {
    .....
}

参考:

@ControllerAdvice annotation documentation

@Order annotation documentation

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2020-06-05
    • 1970-01-01
    • 2018-04-07
    • 2019-06-04
    • 2020-01-20
    • 1970-01-01
    • 2023-03-30
    • 2016-12-09
    相关资源
    最近更新 更多