【问题标题】:Can a method annotation handle errors thrown by this method?方法注释可以处理此方法引发的错误吗?
【发布时间】:2018-12-13 13:21:37
【问题描述】:

我最近开始学习注解,我想知道一个方法注解可以处理这个方法抛出的错误吗?或者要知道这个异常/错误的代码。

附:如果可以,下一步是根据错误代码重试此方法

附言我知道spring Retryable,但我不能使用它。我试图在谷歌中找到有关我的问题的信息,但我没有找到。

【问题讨论】:

    标签: java exception methods annotations


    【解决方案1】:

    注释本身什么也不做。这只是标记代码。您需要有一些处理程序,它们会扫描您的类并在出现注释时做出反应。

    大多数框架已经有处理程序和扫描器,因此开发人员包含适当的框架,添加适当的注释,并且由于这些框架将为开发人员或应用程序执行一些工作。

    顺便说一句,对于错误处理,我建议使用这样的简单代理: Invoke method in another class's try catch block

    【讨论】:

      【解决方案2】:

      您可能更多地考虑Aspect Oriented Programming

      含义:java 注释不是关于将功能“添加到”方法中。它们是由某种组件(编译时的编译器或运行时的某个框架)“评估”并触发该组件中的活动的标记。

      为了真正操纵方法的行为(例如:添加自动跟踪/日志记录代码),您需要 AOP 之类的东西。当然:编译器注释的全部目的是基于注释生成代码。 Project Lombok 就是一个很好的例子:你把注解放到你的源代码中,编译的类文件包含很多 Lombok 在编译过程中插入的东西。

      【讨论】:

        【解决方案3】:

        实际上,OOP 中的基本内容之一就是 IoC(控制反转)。我们在构建专业应用程序时需要注意这种方法。

        https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring

        例如, 我们可以在项目的每个类中编写 try/catch 块。这是不好的做法。 而不是这种方式,我们可以使用@ControllerAdvice 注解。 只需定义一个特定的异常,JVM 会在所有类/请求中为您捕获它。这就是 IoC。

        您可以在项目中的每个请求中捕获异常,如果您在 @ControllerAdvice 注释上的类中定义异常。

        简单用法示例:

        @ControllerAdvice
        @RestController
        public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
        
            @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
            public final ResponseEntity httpRequestMethodNotSupportedException(Exception ex, WebRequest request) {
                ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "there isn’t an URL like that",
                        request.getDescription(false));
                return new ResponseEntity<>(exceptionResponse, HttpStatus.METHOD_NOT_ALLOWED);
        
            } 
        

        这是关于@ControllerAdvice 的有用链接:

        https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-19
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          • 1970-01-01
          • 2014-01-15
          • 2018-10-28
          相关资源
          最近更新 更多