使用Apache Camel解组JSON

时间:2016-11-30 22:52:16

标签: json rest apache-camel

我使用Apache Camel组件http4从REST Web服务请求数据。

此REST服务的响应类型是JSON。

{"coord":{"lon":145.77,"lat":-16.92},"weather": 
[{"id":802,"main":"Clouds","description":"scattered 
clouds","icon":"03n"}],"base":"stations",
....

我有一个JSON注释的Java类,它反映了JSON结构

@JsonPropertyOrder({
    "coord",
    "weather",
    "base",
...

})
public class Report {

    @JsonProperty("coord")
    private Coord coord;
    @JsonProperty("weather")
    private List<Weather> weather = new ArrayList<Weather>();
    @JsonProperty("base")
    private String base;

...

在Camel Route中我定义了一个JsonDataFormat,它引用了带注释的类。

...
public void configure() throws Exception {
    JsonDataFormat jsonDataFormat = new JsonDataFormat();
    jsonDataFormat.setUnmarshalType(Report.class);

    from(timer....).to("http4://${url}").unmarshal(jsonDataFormat).bean(myService);

这导致异常:

  

com.thoughtworks.xstream.mapper.CannotResolveClassException:coord at   com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81)   〜[XStream的-1.4.9.jar:1.4.9]

  • 我尝试将类Coord用作unmarshalType
  • 我使用了unmarshalType的完全限定名称
  • 我还尝试了没有JSON-Annotations的纯Pojo

1 个答案:

答案 0 :(得分:1)

您可以尝试将Jackson指定为数据格式的JsonLibrary吗?您使用的注释是杰克逊的XStream尝试执行解组:

JsonDataFormat jsonDataFormat = new JsonDataFormat(JsonLibrary.Jackson);
jsonDataFormat.setUnmarshalType(Report.class);

从每一个人的角度来看,我都认为这应该有用。