我正在使用一个API,该API基本上允许导航文件系统。我试图通过API从返回的JSON中访问数据,以便对其执行功能。
下面是我使用的访问API的代码。我试图用元帅来 将返回的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},类型为:java.util.LinkedHashMap的{name = dir3,type = directory},{name = dir4,type = directory}]}。交换[ID-IT1289-1529914067957-0-1]
我使用不正确的编组后是否正在访问返回的MAP?如果是这样,我必须使用什么正确的语法?
我看到了其他解组示例...但是我无法完全理解。我注意到许多示例使用具有JSON结构的类。这有必要吗?如果我的身体当前是类型:java.util.LinkedHashMap,我希望它应该不是访问问题,但是我似乎找不到办法。
预先感谢
答案 0 :(得分:2)
执行此操作的最佳方法是创建一个与您的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(....);
最后一部分我留为空白,您可以在此处添加一个处理器来验证您的逻辑。您可以从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>