Camel ProducerTemplate.getBody(Class <t>)Json到Pojo总是返回null

时间:2016-02-24 13:22:08

标签: java-ee apache-camel

我有一个调用Http4端点的生产者模板。如何将响应转换为Pojo?只有转换为String正在工作,但不能使用producerTemplate.getBody(Class)转换为Pojo。

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);

示例Foo Json:

{
"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 个答案:

答案 0 :(得分:1)

杰克逊转换器上有骆驼2.17的演变,CAMEL-9583。通过此更改,您将能够启用&#34;后备转换器&#34;通过在上下文中设置这些属性来使用Jackson:

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

Camel将尝试使用Jackson将消息转换为您的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);
  }
}

答案 1 :(得分:0)

你可以这样使用杰克逊:

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

我不知道有一种方法可以将json data format非编组直接注入生产者模板。

当然,如果您选择这样做,您可以使用任何其他JSON库。