当前位置: 首页 > 知识库问答 >
问题:

如果REST控制器类和接口有一个用@HystrixCommand注释的API,则不会加载所有REST API

申自明
2023-03-14

我已经开始使用spring boot 1.4.1和spring cloud Camden。释放

我创建了两个简单的REST控制器类及其接口。我在第一个控制器类和接口的一个API上放置了@HystrixCommand注释。我还在同一个控制器类和接口中添加了回退方法。代码编译很好,服务加载也很好。但是我看到第一个REST控制器类REST API没有加载/映射,这意味着调用这些REST API返回404。我有一个没有任何@HystrixCommand的第二个REST控制器,属于此类的API加载正常。

如果我简单地注释掉“工具”

补救办法是什么?

一些虚拟代码片段可以帮助理解这个问题-

public interface FirstRESTController {

   @RequestMapping(value = "/aa", method = RequestMethod.GET)
   ResponseEntity<String> getAA();

   @HystrixCommand(fallbackMethod = "reliable")
   @RequestMapping(value = "/bb", method = RequestMethod.GET)
   ResponseEntity<String> getBB();

   public ResponseEntity<String> reliable();
}

@RestController
class FirstRESTControllerImpl implements FirstRESTController {

    @RequestMapping(value = "/aa", method = RequestMethod.GET)
    ResponseEntity<String> getAA() { ... }

    @HystrixCommand(fallbackMethod = "reliable")
    @RequestMapping(value = "/bb", method = RequestMethod.GET)
    ResponseEntity<String> getBB() { ... }

    public ResponseEntity<String> reliable() { ... }
}

---------------------------------------------------------------------
public interface SecondRESTController {

    @RequestMapping(value = "/cc", method = RequestMethod.GET)
    ResponseEntity<String> getCC();
}

@RestController
class SecondRESTControllerImpl implements SecondRESTController {

    @RequestMapping(value = "/cc", method = RequestMethod.GET)
    ResponseEntity<String> getCC() { ... }
}

共有1个答案

丁毅庵
2023-03-14

这是一个众所周知的问题。在具有回退功能的控制器上安装@HystrixCommand,是行不通的。使用hystrix注释将工作移动到另一个bean。

 类似资料:
  • 问题内容: 有没有理由不将Controller映射为接口? 在所有的示例和问题中,我看到了周围的控制器,都是具体的类。是否有一个原因?我想将请求映射与实现分开。但是,当我尝试在具体类中获取a 作为参数时,我碰壁了。 我的Controller界面如下所示: And the implementing class: 该方法效果很好;在抛出一个异常 如果我将注释添加到具体类中,那么一切都会按预期工作,但是

  • 问题内容: 在我不使用Spring的项目中,我仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多数是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4.3/

  • 问题内容: 有没有办法获取所有带有注释的Controller的列表?我想像这样使用它们: 谢谢! 问题答案: getBeansWithAnnotation() 如果您已使用控制器…对其进行注释: 然后

  • 下面是我的Rest控制器代码: 问题是当我通过POSTMAN调用它时,如下所示: 我可以看到方法内部的有效文件,但所有注入的bean都是NULL Debug在错误的方法中 我的环境:Java17(zulu17.28.13-ca-jdk17.0.0-win_x64)Spring Boot: 2.6.7

  • 我有一个类,它实现了接口。类由system classloader加载,接口在第三方组件中定义,我认为第三方组件将接口加载到另一个类加载器(动态类加载器)中。 当我试图创建的新实例时,我得到的是的。我想这是因为它是由不同的类加载器加载的。 我尝试创建(与Guice使用的类似),然后从system类加载器加载类,并从另一个类加载器加载所有其他类,我认为这是用于的类加载器,但没有成功。 有办法绕过它吗

  • 问题内容: 在我从事的项目中,我不使用Spring,而仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4