根据对象属性动态定义 XML 标签
Defining XML tag dynamically based on object property
我就是想不通这个。
我有一个名为 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 可以是(当前)"users" 或 "roles"。当 rel 为 "users":
时,我想要生成以下 JSON
{
"users":
{
"rel": "users",
"href": ...
}
}
当 rel 为 "roles":
{
"roles":
{
"rel": "roles",
"href": ...
}
}
无需创建一个 UserPermissionDto 和另一个 RolePermissionDto,因为它们除了这个属性外完全相同。我可以做 entity.getRel() 来了解 Link.
的 rel
请注意我的服务器还可以生成这些响应的 XML 表示,这意味着响应的标签
<entity rel="users" href="http://localhost:8080/users/1"/>
也应如上所示表示("users" 或 "roles" 而不是 "entity")。
我将 JAXB 用于 XML,将 Jackson 用于 JSON。
非常感谢任何帮助。
谢谢
我不确定这是否适用于 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。
很可能这仅适用于集合属性。
我们实际上把问题颠倒过来,找到了更好的解决方案。
我们决定尝试以完整的 HATEOAS 方式实施我们的 API。这样,用户和角色只不过是指向那些特定实体的链接。
通过使用 Spring HATEOAS Project PermissionDto was refactored to a PermissionResource which extends from ResourceSupport. This means a PermissionResource can be composed with either user or role URIs dependending on which Permission Resource Assembler 正在使用中。
我就是想不通这个。
我有一个名为 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 可以是(当前)"users" 或 "roles"。当 rel 为 "users":
时,我想要生成以下 JSON {
"users":
{
"rel": "users",
"href": ...
}
}
当 rel 为 "roles":
{
"roles":
{
"rel": "roles",
"href": ...
}
}
无需创建一个 UserPermissionDto 和另一个 RolePermissionDto,因为它们除了这个属性外完全相同。我可以做 entity.getRel() 来了解 Link.
的 rel请注意我的服务器还可以生成这些响应的 XML 表示,这意味着响应的标签
<entity rel="users" href="http://localhost:8080/users/1"/>
也应如上所示表示("users" 或 "roles" 而不是 "entity")。
我将 JAXB 用于 XML,将 Jackson 用于 JSON。
非常感谢任何帮助。
谢谢
我不确定这是否适用于 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。
很可能这仅适用于集合属性。
我们实际上把问题颠倒过来,找到了更好的解决方案。
我们决定尝试以完整的 HATEOAS 方式实施我们的 API。这样,用户和角色只不过是指向那些特定实体的链接。
通过使用 Spring HATEOAS Project PermissionDto was refactored to a PermissionResource which extends from ResourceSupport. This means a PermissionResource can be composed with either user or role URIs dependending on which Permission Resource Assembler 正在使用中。