我无法理解这一点。
我有一个名为PermissionDto的对象:
@XmlRootElement(name = "permission")
@XmlAccessorType(FIELD)
public class PermissionDto implements Serializable {
private static final long serialVersionUID = 1L;
private Link entity;
... some other properties, constructors and getters
}
这将生成以下JSON:
{
"entity":
{
"rel": "users",
"href": ...
}
}
实体rel可以(当前)"用户"或者"角色"。当rel是"用户":
时,我希望产生以下JSON
{
"users":
{
"rel": "users",
"href": ...
}
}
当rel是"角色":
{
"roles":
{
"rel": "roles",
"href": ...
}
}
无需创建UserPermissionDto和另一个RolePermissionDto,因为除了这一个属性外,它们完全相同。我可以执行entity.getRel()以了解链接的rel。
请注意我的服务器也可以生成这些响应的XML表示,这意味着响应标记
<entity rel="users" href="http://localhost:8080/users/1"/>
也应如上所示(&#34;用户&#34;或&#34;角色&#34;而不是&#34;实体&#34;)。
我使用JAXB for XML和Jackson for JSON。
非常感谢任何帮助。
由于
答案 0 :(得分:1)
我不确定这是否适用于JSON,但请尝试@XmlElements
:
@XmlElements({
@XmlElement(name="users", type=Users.class),
@XmlElement(name="roles", type=Roles.class)
}
public Link entity;
这假设Users
和Roles
延长Link
。在这种情况下,根据您的对象是否具有Users
或Roles
的实例,您将获得users
或roles
元素名称。不确定JSON。
这可能只适用于集合属性。
答案 1 :(得分:1)
我们实际上将问题颠倒过来,找到了更好的解决方案。
我们决定尝试以完整的HATEOAS方式实现我们的API。通过这种方式,用户和角色只不过是指向这些特定实体的链接。
使用Spring HATEOAS Project PermissionDto被重构为从ResourceSupport扩展的PermissionResource。这意味着PermissionResource可以由用户角色URI构成,这些URI依赖于正在使用的Permission Resource Assembler。