Возвращаемое значение из Apache Верблюжий маршрут к контроллеру Spring Boot - PullRequest
0 голосов
/ 20 марта 2020

Я звоню на верблюде из контроллера Spring Boot. Верблюжий маршрут вызывает службу REST, которая возвращает строковое значение, и я пытаюсь вернуть это значение из верблюжьего маршрута в контроллер. Ниже находится контроллер Spring Boot:

@RestController
@RequestMapping("/demo/client")
public class DemoClientController {

    @Autowired private ProducerTemplate template;

    @GetMapping("/sayHello")
    public String sayHello() throws Exception {
        String response = template.requestBody("direct:sayHelloGet", null, String.class);
        return response;
    }

}

И ниже мой верблюжий маршрут:

@Component
public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("direct:sayHelloGet")
            .log("Route reached")
            .setHeader(Exchange.HTTP_METHOD, simple("GET"))
            .to("http://localhost:8080/demo/sayHello")
            .log("${body}");
    }

}

В маршруте журнал печатает возвращаемое значение из службы REST, но эту строку не возвращается в контроллер. Кто-нибудь может подсказать, как вернуть значение в контроллер Spring Boot?

Используемая версия Spring Boot - 2.2.5, Apache Версия Camel - 3.0.1.

1 Ответ

1 голос
/ 21 марта 2020

См. Этот FAQ https://camel.apache.org/manual/latest/faq/why-is-my-message-body-empty.html

Ответ от http основан на потоковой передаче и, следовательно, доступен только для чтения один раз, а затем читается через журнал и «пустым» в качестве ответа. Так что либо

  • не регистрировать
  • включить потоковое кэширование
  • преобразовать ответ из http в строку (без потоковой передачи и безопасного чтения повторно)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...