【问题标题】:How to handle the exceptions using Spring AOP before reaching the endpoint如何在到达端点之前使用 Spring AOP 处理异常
【发布时间】:2016-03-14 04:42:36
【问题描述】:

我有一个定义端点的弹簧控制器

@RequestMapping(value = "/hello", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> hello() {
    .....
}

在我的方面类中,我有,

@Around("execution(* org.example.metrics.dropwizard.SampleController.hello(..))")
public Object aroundCallingHello(ProceedingJoinPoint joinPoint) throws Throwable
{ 
}

可以说,我的端点将一个 java 对象作为参数(POST 调用)保存在数据库中。 来自网页的请求采用 JSON 格式。如果 JSON 结构与 JAVA POJO 结构不匹配,则会抛出异常。但我无法在 Aspect 类中捕获该异常(aroundCallingHello 方法不起作用)。如何在 AOP 中捕获此类异常(请求甚至没有到达控制器中的端点)。我需要跟踪应用程序中的各种异常。谢谢你。

【问题讨论】:

  • 你能在aroundCallHello方法中显示代码吗?
  • `try{ System.out.println("Chiru at aroundCallingHello !!!"); counterService.increment("method.invoke.hello");返回 joinPoint.proceed(); }
  • 请看这个:`try{ System.out.println("at aroundCallingHello !!!"); counterService.increment("method.invoke.hello");返回 joinPoint.proceed(); } catch(Throwable tr) { System.out.println("at catch aroundCallingHello !!!"); } ` 没有任何语句在控制台中打印
  • 我收到了一些请求的 JsonGenerationException 异常,我需要将这些请求记录在 Aspect 类的计数器中。任何建议表示赞赏。谢谢!

标签: json spring-boot spring-aop


【解决方案1】:

您应该使用@ControllerAdvice 来实现这些类型的异常处理。您可以找到完整的explanation with example here。您可以有一个方法(或多个方法)来处理不同类型的异常(包括是否有任何自定义异常)。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2012-06-12
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多