Как реализовать проверку статуса для фиктивного клиента?

Я пытаюсь объединить 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();
    }

}

person ElbrusGarayev    schedule 19.04.2021    source источник


Ответы (2)


Feign также может вернуть весь ответ (ResponseEntity) вместо объекта body. Итак, вы можете выполнить рефакторинг своего клиента Feign следующим образом:

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

после этого вы можете получить код состояния и тело:

ResponseEntity<String> response = demo1Client.getDemo1();
response.getStatusCodeValue();
response.getBody();
person csenga    schedule 19.04.2021

В качестве альтернативы вы можете перехватить объект FeignException, на котором есть код состояния, и вернуть правильный объект ответа или новое исключение, которое сопоставлено с явным кодом ошибки. Это исключение будет выдано для любых возвратов 4XX или 5XX. См. Документы здесь: https://appdoc.app/artifact/io.github.openfeign/feign-core/9.3.0/feign/FeignException.html

person Taugenichts    schedule 20.04.2021