【问题标题】:How to implement status checking for feign client?如何为feign客户端实现状态检查?
【发布时间】:2021-04-19 11:02:13
【问题描述】:

我正在尝试组合 2 个或更多服务,我想检查它们的状态并返回自定义响应。例如,其中一个返回 200,另一个返回 500、404、400 等。在这种情况下,我想返回空列表。以下示例仅在所有服务返回 200 时有效

@RestController
@RequiredArgsConstructor
public class Demo3Controller {

    private final Demo1Client demo1Client;
    private final Demo2Client demo2Client;

    @GetMapping("/demo3")
    public String get(){
        return demo1Client.getDemo1() + "&&" + demo2Client.getDemo2();
    }

}

【问题讨论】:

    标签: spring spring-boot spring-cloud-feign feign


    【解决方案1】:

    Feign 还可以返回整个响应 (ResponseEntity),而不是 body 对象。所以,你可以像这样重构你的 Feign 客户端:

    @FeignClient
    public interface Demo1Client {
        
        public ResponseEntity<String> getDemo1();
    }
    

    之后,您可以通过以下方式获取状态码和正文:

    ResponseEntity<String> response = demo1Client.getDemo1();
    response.getStatusCodeValue();
    response.getBody();
    

    【讨论】:

      【解决方案2】:

      或者,您可以捕获带有状态代码的 FeignException 对象并返回正确的响应对象或映射到显式错误代码的新异常。任何 4XX 或 5XX 返回都会引发该异常。在此处查看文档:https://appdoc.app/artifact/io.github.openfeign/feign-core/9.3.0/feign/FeignException.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 2023-01-29
        • 2020-01-14
        • 1970-01-01
        相关资源
        最近更新 更多