我正在努力学习Spring Boot微服务。现在,如果我的任何呼叫服务关闭,我将尝试使用resilience4j实现断路器。
如果我将回退方法返回类型设置为实际的方法返回类型,那么它可以正常工作,但是我不能显示我的服务关闭的信息。因为它随后在对象的字段中发送响应null。但是如果我在实际方法上将返回类型更改为String,并且在回退中,那么我将无法以JSON的形式获取对象值。
是否有可能返回字符串的东西,如分支服务是关闭!...
与我的回退方法,如果确定,然后从实际调用的方法获取对象值作为JSON?我的尝试如下:
我的控制器方法:
@GetMapping("/getById/{id}")
@CircuitBreaker(name = "default", fallbackMethod = "employeeFallback")
public ResponseModelEmployee getEmployee(@PathVariable("id") Long id) {
return employeeService.findByEmployeeId(id);
}
我在控制器中的回退方法:
public ResponseModelEmployee employeeFallback(Long id, Exception ex) {
return new ResponseModelEmployee();
}
我的服务方法从控制器调用:
public ResponseModelEmployee findByEmployeeId(Long id) {
ResponseModelEmployee empDetails = new ResponseModelEmployee();
...
Branch branch = restTemplate.getForObject("http://BRANCH-SERVICE/branch/getById/" +
employee.get().getBranchId(),
Branch.class);
...
return empDetails;
}
我的愿望方法作为退路:
public String employeeFallback(Long id, Exception ex) {
return "Branch Service is down";
}
如果我将desire方法设置为回退,则会出现以下错误:
java。lang.NoSuchMethodException:类com。实例受雇者哇。ResponseModelEmployee类com。实例受雇者控制器。雇员控制员。io上的employeeFallback(类java.lang.Long,类java.lang.Throwable)。github。弹性4j。退路。后备方法。创建(FallbackMethod.java:92)~[resilience4j-spring-1.7.0.jar:1.7.0]
Resilince4j期望回退方法具有与实际方法相同的返回类型。文件说:
重要的是要记住,回退方法应该放在同一个类中,并且必须具有相同的方法签名,只有一个额外的目标异常参数)。
如果有多个fallbackMethod方法,则将调用最匹配的方法,例如:如果尝试从NumberFormatException恢复,则将调用具有签名字符串fallback(字符串参数,IllegalArgumentException异常)}的方法。
只有当多个方法具有相同的返回类型并且希望一劳永逸地为它们定义相同的回退方法时,才能使用异常参数定义一个全局回退方法。
因此,您不能直接将返回类型更改为不同的类型。你可以尝试一些建议:
>
将服务方法和回退方法的返回类型更改为对象
。
还有一种方法是,您可以保持返回类型不变,但可以向响应模型ResponseModelEmployee
添加一个String
type消息对象。然后在回退过程中设置消息字符串。
另一种解决方案是从rest调用的方法返回ResponseEntity,并在回退方法中使用ResponseEntity
问题内容: 这就是我想要做的。使用反射,我想获取所有方法及其返回类型(非泛型)。我一直在这样做。但是,当我遇到返回类型未知的方法时,我遇到了限制。 我如何知道方法的返回类型是否通用?我没有奢求在运行时拥有对象。我正在尝试使用Google 或使用抽象类来获取类型信息。我想关联到对象的方法。 有人认为Java不保留通用信息。在这种情况下,为什么第一次强制转换有效而第二次强制转换无效。 任何帮助表示赞赏
我正在Java开发一个纸牌游戏,我试图比较hashMap中的键和ArrayList中的元素(两者都是对象)。hashCode()和equals()被重写,但出现了一个错误,我不确定它的哪一部分是错误的。 这是纸牌课 我们要做的比较 错误:点击查看错误图片
问题内容: 比较器内部的返回值实际上是什么意思? 例如 : 如果返回类型为1,则其实际返回 [20、10、30、100] 如果返回类型为-1,则其实际返回 [100,30,10,20] 如果返回类型为0,则其实际返回 [20] 请告诉我这表示什么? 问题答案: 返回值(不是类型是)告诉调用者(对数据进行排序的事物): 如果始终为比较器返回相同的值(o,1,-1),而不管其输入如何,那么您使用的是错
现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。
我得到了ClassCastException。我正在遵循这个答案,但没有得到正确的答案。将对象转换为通用类型以返回 BubbleSort.java MainPorgram.java 安慰 线程“main”Java . lang . classcastexception中出现异常:无法转换[ljava . lang . object;to [I at java.lang.Class.cast(未知来