Проблема десериализации потока / моно в Feign Spring Cloud - PullRequest
0 голосов
/ 29 мая 2019

Я разрабатываю приложение для микроуслуг с Kotlin Webflux (Reactor3), Eureka, Zuul и Feign. За исключением того, что у меня всегда возникает ошибка при вызове API через мой микро-сервис Feign. Похоже, он не может десериализовать данные. Подскажите, пожалуйста, совместим ли Feign с Flux и Monno? спасибо

{ «метка времени»: «2019-05-29T07: 39: 43,998 + 0000», "путь": "/ хобби /", «статус»: 500, «ошибка»: «Внутренняя ошибка сервера», "message": "Ошибка определения типа: [простой тип, классctor.core.publisher.Flux]; вложенное исключение - com.fasterxml.jackson.databind.exc.InvalidDefinitionException: невозможно создать экземпляр reactor.core.publisher.Flux (без создателей, например конструкция по умолчанию, существует): абстрактные типы либо должны быть сопоставлены с конкретными типами, либо иметь собственный десериализатор, либо содержать дополнительную информацию о типе \ n в [Source: (PushbackInputStream); строка: 1, столбец: 1] " }

1 Ответ

0 голосов
/ 10 июня 2019

Feign не поддерживает десериализацию Mono / Flux.Существует альтернативная библиотека feign, которая полностью ее поддерживает: feign-реактивный .

Обратите внимание, что это переписывание симулятора, в котором полностью используется реактивный код, который отличается от ядра Feign OpenFeign.

Вот фрагмент того, как его использовать, наряду с обычным Feign, взятый из пример приложения .

@SpringBootApplication(exclude = ReactiveLoadBalancerAutoConfiguration.class)
@RestController
@EnableReactiveFeignClients
@EnableFeignClients
public class FeignApplication {

    @Autowired
    private GreetingReactive reactiveFeignClient;

    @Autowired
    private Greeting feignClient;

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }

    @GetMapping("/greetingReactive")
    public Mono<String> greetingReactive() {
        return reactiveFeignClient.greeting().map(s -> "reactive feign! : " + s);
    }

    @GetMapping("/greeting")
    public String greeting() {
        return "feign! : " + feignClient.greeting();
    }
}
...