用于将复杂实体发布到Spring数据REST/HATEOAS服务的Java客户端
据我所知,提供了将复杂对象转换为适当HAL格式的方法。当然,这在编组框架本身中的对象时得到了利用<代码>资源和用于将复杂实体发布到Spring数据REST/HATEOAS服务的Java客户端,java,spring,spring-data-rest,spring-hateoas,Java,Spring,Spring Data Rest,Spring Hateoas,据我所知,提供了将复杂对象转换为适当HAL格式的方法。当然,这在编组框架本身中的对象时得到了利用资源和链接对象等 出于用例的考虑: 公司1是我的系统中现有的公司。我想添加一名新的员工,该员工为公司1工作 下面是一个示例Employee对象,您将从基于Spring数据REST的服务中收到该对象。SpringHateoas还提供了自己构造这些对象的方法 { "id": null, "firstName": "bZWthNFk", "lastName": "GtTnrqka",
链接
对象等
出于用例的考虑:
公司1
是我的系统中现有的公司。我想添加一名新的员工
,该员工为公司1工作
下面是一个示例Employee
对象,您将从基于Spring数据REST的服务中收到该对象。SpringHateoas还提供了自己构造这些对象的方法
{
"id": null,
"firstName": "bZWthNFk",
"lastName": "GtTnrqka",
"loginId": "zTk5rT",
"active": true,
"_links": {
"company": {
"href": "http://localhost/companies/1";
}
}
}
但是,这似乎不适用于发布对象。据我所知,同一对象必须发布为:
{
"id": null,
"firstName": "bZWthNFk",
"lastName": "GtTnrqka",
"loginId": "zTk5rT",
"active": true,
"company": "http://localhost/companies/1"
}
据我所知,HATEOAS或Data REST项目都没有提供任何方法来生成此对象,以便通过RestTemplate
或其他方法发布到有效的基于HAL的服务。事实上,我找不到任何方法可以在没有人工编组的情况下轻松发布复杂对象。我这么想是不是错了
如何构建一个有效的JavaSDK来进行服务到服务的通信,在没有这个工具的情况下利用HATEOAS原则来可靠地发布对象
长话短说,我想发布这个对象,而不必手动序列化关联的URI
public class Employee {
private Integer id;
@NotNull
private Company company;
private String firstName;
private String lastName;
}
我已针对此创建了以下改进请求:
如果您至少使用SpringDataREST的2.0版,您建议的方法实际上应该有效
您还应该有一个关联资源,如http://app.com/employee/10/company
。您可以使用媒体类型文本/uri列表将新链接放置到该位置,或使用删除将公司从员工中删除
UDATE
我似乎没有解决您的主要问题,这已通过您的更新和评论得到澄清。因此,让我们以您的Employee
类为例,该类与客户有关联
从您发布的JSON响应中可以看到,RESTAPI使用的数据结构不包含Customer
对象(或者在这种情况下是Company
),只有一个链接。客户机通常使用API定义的数据结构。因此,customer
首先是链接,不需要将对象序列化为链接
如果客户端在内部使用不同的数据结构,则无论如何都需要进行某种转换。但原因可能是不同的结构,而不是HAL或关联链接。这完全有道理:-)我的后续问题是,如果公司受到NotNull约束,您将如何处理这种情况?@BrandonV您应该能够按照您的建议发布对象,假设你至少有2.0版的SpringDataREST。是的,事实上,我知道很多工作都很有效,尽管你对关联资源的建议也很酷。我关心的是SpringHateOAS提供的工具,用于以这种方式与基于HAL的服务交互。手动执行此操作,或者编写自己的一次性封送处理程序来处理常见情况似乎有点不直观。因此,您的意思是您有一个Employee
实例,并希望通过restemplate
发送它,例如,但是您会自动序列化Company
字段?这意味着您有两个使用完全相同的数据结构的Java应用程序。这是正确的吗?这里的具体案例是使用MockMvc发布(相同的应用程序),但我们暂时也可以假设您的示例。