异常信息
Command method: public java.util.List com.tuxc.controller.DeptController.list();
Fallback method: public com.tuxc.pojo.Dept com.tuxc.controller.DeptController.hystrixGet();
Hint: Different size of types variables.
Command type literals size = 2: [java.util.List<com.tuxc.pojo.Dept>, class com.tuxc.pojo.Dept]
Fallback type literals size = 1: [class com.tuxc.pojo.Dept]
Command type literal pos: unknown; Fallback type literal pos: unknown] with root cause
com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: Incompatible return types.
Command method: public java.util.List com.tuxc.controller.DeptController.list();
Fallback method: public com.tuxc.pojo.Dept com.tuxc.controller.DeptController.hystrixGet();
Hint: Different size of types variables.
Command type literals size = 2: [java.util.List<com.tuxc.pojo.Dept>, class com.tuxc.pojo.Dept]
Fallback type literals size = 1: [class com.tuxc.pojo.Dept]
Command type literal pos: unknown; Fallback type literal pos: unknown
at com.netflix.hystrix.contrib.javanica.utils.FallbackMethod.validateReturnType(FallbackMethod.java:165) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.utils.FallbackMethod.validateReturnType(FallbackMethod.java:130) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect.setFallbackMethod(HystrixCommandAspect.java:333) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect.access$300(HystrixCommandAspect.java:64) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect$MetaHolderFactory.metaHolderBuilder(HystrixCommandAspect.java:176) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect$CommandMetaHolderFactory.create(HystrixCommandAspect.java:258) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect$MetaHolderFactory.create(HystrixCommandAspect.java:166) ~[hystrix-javanica-1.5.18.jar:1.5.18]
at
原因与解决:Hystrix的熔断方法一定要跟原方法相似
//@HystrixCommand(fallbackMethod = "hystrixGet")
@HystrixCommand(fallbackMethod = "hystrixGet")
@GetMapping("/dept")
public List<Dept> list(){
List<Dept> list = new ArrayList<>();
list.add(new Dept().setName("王根基").setId(1));
list.add(new Dept().setName("周去去").setId(2));
list.add(new Dept().setName("郑在搞").setId(3));
list.add(new Dept().setName("迪卢克").setId(4));
return list;
}
//备选方法 上面的方法报错时调用
public List<Dept> hystrixGet(){
List<Dept> list = new ArrayList<>();
list.add(new Dept().setId(1).setName("默认").setDbSource("默认"));
return list;
}
//错误演示 返回值不同
/* public Dept hystrixGet(){
return new Dept().setId(1).setName("默认").setDbSource("默认");
}*/