从Apache Camel中的JSON主体访问数据

malteser:

我正在使用一个API,该API基本上允许文件系统的导航。我试图通过API从返回的JSON中访问数据,以便对其执行功能。

下面是我正在使用的访问API的代码。我尝试使用unmarshal将返回的JSON转换为Map。

from("timer://foo?fixedRate=true&period=120000")
    .log("Checking for files")
    .setHeader("Authorization", simple(myHttp.getAuth()))
    .setHeader("CamelHttpMethod", constant("GET"))
    .to(myHttp.getFullRequest())
    .unmarshal(new JacksonDataFormat(Map.class)).log("${body}");

哪个返回此数据给我:

{
    objects=[
    {
        name=file1.csv,
        type=file
    },
    {
        name=dir1,
        type=directory,
    },
    {
        name=dir2,
        type=directory
    },
    {
        name=dir3,
        type=directory
    },
    {
        name=dir4,
        type=directory
    }]
}

我想访问“对象”下的数组,以检查此目录内是否存在任何文件。到目前为止,我仅尝试将数据记录在对象下,因此我使用了以下代码:

   .unmarshal(new JacksonDataFormat(Map.class)).log("${body.objects}");

使用$ {body.objects},我仍然无法访问MAP中的数据。我希望这样的东西会被退回:

        [{
            name=file1.csv,
            type=file
        },
        {
            name=dir1,
            type=directory,
        },
        {
            name=dir2,
            type=directory
        },
        {
            name=dir3,
            type=directory
        },
        {
            name=dir4,
            type=directory
        }]

但是我得到了这个错误:

名称方法:在bean上找不到对象:{objects = [{name = file1.csv,type = file},{name = dir1,type = directory,},{name = dir2,type = directory},{name = dir3,type = directory},{name = dir4,type = directory}]},类型为:java.util.LinkedHashMap。交换[ID-IT1289-1529914067957-0-1]

错误使用unmarshall后,我是否正在访问返回的MAP?如果是的话,我必须使用什么正确的语法?

我看到过其他解组邮件的例子...但是我无法完全理解。我注意到许多示例都使用具有JSON结构的类。这有必要吗?如果我的身体当前是类型:java.util.LinkedHashMap,我希望它应该不是访问问题,但是我似乎找不到方法。

提前致谢

pvpkiran:

最好的方法是创建一个与您的Json Structure相匹配的类。

class RestResponse {
   List<FileNameType> objects;
   //Getters and Setters
}

class FileNameType {
  String name;
  String type;
  //Getters and setters.
}

然后像这样改变你的路线

from("timer://foo?fixedRate=true&period=120000")
    .log("Checking for files")
    .setHeader("Authorization", simple(myHttp.getAuth()))
    .setHeader("CamelHttpMethod", constant("GET"))
    .to(myHttp.getFullRequest())
    .unmarshal().json(JsonLibrary.Jackson, RestResponse.class)
    .to(....);

最后一部分我留为空白,您可以在此处添加一个处理器来验证您的逻辑。您可以从获取RestResponse对象exchange.getIn().getBody()这样的事情会做

........
.unmarshal().json(JsonLibrary.Jackson, RestResponse.class)
.process(exchange -> {

              RestResponse response = exchange.getIn().getBody(RestResponse.class);
               // Do your logic here.

  })

您可能需要添加此依赖项

<dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-jackson</artifactId>
       <version>yourcamelversion</version>
 </dependency>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章