Camel ProducerTemplate.getBody (Class<T>) Json для Pojo всегда возвращает нуль

У меня есть шаблон производителя, который вызывает конечную точку Http4. Как я могу преобразовать ответ в Pojo? Работает только конвертирование в String, но не конвертирование в Pojo с помощью providerTemplate.getBody(Class).

Map<String, Object> headers = new HashMap<>();
headers.put(Exchange.HTTP_METHOD, GET);

//This is working, I can see the response
String responseBody = producerTemplate.getBody(String.class);

//This not working working, always return null
Foo responseBody = producerTemplate.getBody(Foo.class);

Образец Фу Джсон:

{
"name":"juan",
"age": 12
}

Foo.java

public class Foo {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

2 ответа

Существует эволюция верблюда 2.17 на конвертере Джексона с CAMEL-9583. С этим изменением вы сможете включить "запасной конвертер", используя Джексона, установив эти свойства в контексте:

context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
context.getProperties().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");

Верблюд затем попытается использовать Джексона, чтобы преобразовать сообщение в ваш класс pojo.

В текущей версии (2.16) вы можете создать явный конвертер для вашего pojo:

@Converter
public FooConverter {

  private static final ObjectMapper MAPPER = new ObjectMapper();

  @Converter
  public static Foo fromString(String message) {
    return MAPPER.readValue(message, Foo.class);
  }
}

Вы можете использовать Джексона так:

import org.codehaus.jackson.map.ObjectMapper;
// [...]
ObjectMapper json = new ObjectMapper();
Foo foo = json.readValue(producerTemplate.getBody(String.class), Foo.class);

Я не знаю, как внедрить формат данных json для отмены маршалинга непосредственно в шаблон производителя.

Конечно, вы можете использовать любую другую библиотеку JSON, если захотите.

Другие вопросы по тегам