如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API
Posted
技术标签:
【中文标题】如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API【英文标题】:All REST APIs are not loaded if the REST controller class and interface have an API annotated with @HystrixCommand 【发布时间】:2017-02-08 01:24:11 【问题描述】:我已经开始使用 spring boot 1.4.1 和 spring cloud Camden.RELEASE。
我创建了两个简单的 REST 控制器类及其接口。我已经在第一个控制器类的一个 API 上放置了 @HystrixCommand 注释,并且两者都接口。我还在同一个控制器类和接口中添加了回退方法。代码编译顺利,服务加载也很好。但我看到第一个 REST 控制器类 REST API 未加载/映射,这意味着调用这些 REST API 返回 404。我有一个没有任何 @HystrixCommand 的第二个 REST 控制器,属于此类的 API 加载正常。
如果我在第一个 REST 控制器类中简单地注释掉“实现”,一切都会开始工作。
有什么办法?
一些虚拟代码 sn-p 以帮助理解问题 -
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() ...
【问题讨论】:
为什么要对接口中的方法进行注解?不要忘记用@RestController
注释类。
【参考方案1】:
这是一个已知问题。在具有后备功能的控制器上使用 @HystrixCommand
是行不通的。使用 hystrix 注释将工作转移到另一个 bean。
【讨论】:
以上是关于如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API的主要内容,如果未能解决你的问题,请参考以下文章