如何使用JAXB和JAX-RS在请求上省略XML标记?

问题描述:

我正在学习JAX-RS并使用JAXB编组/解组XML数据,这非常有效。我的问题是回答一个请求,其中应该省略一些XML元素。下面是一个例子:如何使用JAXB和JAX-RS在请求上省略XML标记?

@XmlRootElement(name = "user") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class User { 

@XmlAttribute 
private int id; 

@XmlElement 
private String username; 

@XmlElement 
private String password; 

用户类被用来包裹用户

列表
@XmlRootElement(name = "users") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Users { 

@XmlElement(name = "user") 
private List<User> users = null; 

public Users() { 
} 

public List<User> getUsers() { 
    return users; 
} 

public void setUsers(final List<User> users) { 
    this.users = users; 
} 

} 

REST资源

@GET 
@Path("/users") 
@Produces(MediaType.APPLICATION_XML) 
public Users getAllUsers() { 

    final ArrayList<User> users = new ArrayList<User>(userDB.values()); 
    final Users userList = new Users(); 
    userList.setUsers(users); 

    return userList; 
} 

上面产生以下输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<users> 
<user id="1"> 
    <username>user1</username> 
    <password>passwd0rd</password> 
</user> 
<user id="2"> 
    <username>user2</username> 
    <password>passwd0rd</password> 
</user> 
</users> 

所以问题是 如果有指示JAXB省略,例如(只是这一请求)的密码元素,并有一个这样的输出方式:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<users> 
<user id="1"> 
    <username>user1</username> 
</user> 
<user id="2"> 
    <username>user2</username> 
</user> 
</users> 

感谢您的指导!

+0

将@ulab建议的值设置为null似乎效果很好! – Lazlo

您正在查找的注释是@XmlTransient。这不会映射您的字段,并且不会在任何请求的输出中显示。

但是,如果你只想指定某些请求,那么我想你将不得不明确地将它设置为null这样的特定请求。