我有一个调用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;
}
}
答案 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库。