Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ApacheCamel内部的JSON主体访问数据_Java_Json_Apache Camel - Fatal编程技术网

Java 从ApacheCamel内部的JSON主体访问数据

Java 从ApacheCamel内部的JSON主体访问数据,java,json,apache-camel,Java,Json,Apache Camel,我正在使用一个API,它基本上允许文件系统的导航。我试图从API返回的JSON中访问数据,以便对其执行函数 下面是我正在使用的访问API的代码。我尝试使用unmarshal来 将返回的JSON转换为映射 from("timer://foo?fixedRate=true&period=120000") .log("Checking for files") .setHeader("Authorization", simple(myHttp.getAuth())) .s

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

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

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},我仍然无法访问地图中的数据。我希望这样的东西会被退回:

        [{
            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]

我是否在错误使用解组后访问返回的地图?我必须使用的正确语法是什么

我还见过其他解包的例子。。。但我不能完全理解。我注意到许多示例使用JSON结构的类。这有必要吗?如果我的身体目前是java.util.LinkedHashMap类型,我希望访问它不会有问题,但我似乎找不到方法


提前感谢

最好的方法是创建一个与Json结构匹配的类

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

class FileNameType {
  String name;
  String type;
  //Getters and setters.
}
最后一部分我留白了,在这里你可以添加一个处理器来验证你的逻辑。您可以从
exchange.getIn().getBody()
获取RestResponse对象。像这样的事情就行了

........
.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>

org.apache.camel
骆驼杰克逊
你的骆驼版本
<dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-jackson</artifactId>
       <version>yourcamelversion</version>
 </dependency>