Java Spring HATEOAS在反序列化JSON时添加外部内容

Java Spring HATEOAS在反序列化JSON时添加外部内容,java,json,spring,hateoas,Java,Json,Spring,Hateoas,我正在创建一个客户机来查询我们的JSON Api,并尝试使用来自另一个资源的内容扩展一个资源。我想这样做是因为资源是同一个实体的一部分,我们的用户将返回单个实体,而无需分别查询这两个服务。 我将在这里提供参考资料的基本版本,以便更好地解释问题: /*示例类*/ 公共类样本{ 公共字符串加入; 公共字符串名称; //... 公共地图关系 //…经典的接球手和二传手 } //关系类 公共阶级关系{ 公共字符串id; //接球手和接球手 } 现在JSON Api与此类似: 这是样品 { “_嵌入”:

我正在创建一个客户机来查询我们的JSON Api,并尝试使用来自另一个资源的内容扩展一个资源。我想这样做是因为资源是同一个实体的一部分,我们的用户将返回单个实体,而无需分别查询这两个服务。 我将在这里提供参考资料的基本版本,以便更好地解释问题:

/*示例类*/
公共类样本{
公共字符串加入;
公共字符串名称;
//...
公共地图关系
//…经典的接球手和二传手
}
//关系类
公共阶级关系{
公共字符串id;
//接球手和接球手
}
现在JSON Api与此类似: 这是样品

{
“_嵌入”:{
“样本”:[
{  
“加入”:“SAME1500861”,
“名称”:“1380435”,
“_链接”:{
“self”:{“href”:”https://www.ebi.ac.uk/biosamples/api/samples/SAME1500861"
},
“样本”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samples/SAME1500861"
},
“关系”:
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861"
}
}
}
]
},
“_链接:{}”
}
以下是关系:

{
“加入”:“SAME1500861”,
“_链接”:{
“自我”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861"
},
“源自”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/derivedFrom"
},
“derivedTo”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/derivedTo"
},
“外部链接”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/externalLinks"
},
“退回到”:{
“href”:”https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861/recuratedTo"
}
}
}
任何建议都很好。
谢谢

您只需要创建一个Java类结构来表示JSON中的数据。您可以使用任何在线查看器或一些chrome扩展来查看Structure

我只做了你的一小部分

public class Relations {

    public String accession;
    public Links _links;
}

public class Links {
    public Self self;
}

public class Self {
    public String href;
}
在我看来至少有两个选择

  • 以字符串形式检索JSON并通过Gson进行转换
  • 使用SpringRestTemplate
  • 基本上,我建议使用SpringRESTTemplate

    RestTemplate restTemplate = new RestTemplate();
    
    Relations result = restTemplate.getForObject("https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861", Relations.class);
    
    或者您可以使用任何库来获取JSON响应,并通过Gson进行转换

        String relationsPart = "{\n" + "  \"accession\": \"SAME1500861\",\n" + "  \"_links\": {\n" + "    \"self\": {\n" + "      \"href\": \"https://www.ebi.ac.uk/biosamples/api/samplesrelations/SAME1500861\"\n" + "    }\n" + "  }\n" + "}";
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        Relations result = gson.fromJson(relationsPart, Relations.class);
    

    如果我错了,请纠正我。。。您想调用一次,但得到完整的已解析json对象吗?不,我只想在示例json资源解析期间将两个json资源合并到示例类中。我想我在任何情况下都需要做两个调用,因为资源是分离的。我会在解析后使用Gson和调用类Sample的setRelations方法。有一种方法可以连接到Spring自动解析中吗?我已经在使用RestTemplate,并且使用资源作为对象来检索Spring已经能够对链接进行建模了。这里的问题是关系是spring中的另一个资源,所以我需要另一个GET请求来获取它。但我不知道是否可以在示例资源的Jackson解析中挂钩,以执行第二个查询并检索关系资源。恐怕这个问题的答案是否定的。这是我的第二个评论,为什么不在解析示例资源后发出第二个请求,然后调用setRelations方法呢?是的,但是如果您使用的是restTemplate+Spring+Jackson,那么就不需要使用GSON来实现这一点。我说的对吗?如果你已经在使用RestTemplate是的,但在那时候我不知道你选择了什么。