我有2个类,如下所示:
@XmlRootElement
@PersistenceCapable(detachable="true")
public class User {
@Persistent(primaryKey="true", valueStrategy=IdGeneratorStrategy.IDENTITY)
private Long id;
private String firstname;
private String lastname;
private UserDetails userDetails;
...
}
和
@XmlRootElement
@PersistenceCapable(detachable="true")
public class UserDetails {
private String streetaddress;
private String address;
private String city;
private int pincode;
private Date dateofbirth;
...
}
我只需要检索用户对象,而不必在一个JAXRS函数中包含userdetails,而如图所示,用户对象及其附加的userdetails对象都在另一个JAXRS函数中。
//UserManager.java
public List<User> getUsers() {
javax.jdo.Query q = pm.newQuery("SELECT FROM "+ User.class.getName());
List<User> users = (List<User>) q.execute();
return users;
}
和JAXRS服务:
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<User> getUsers() { //Retrieves all users and user details
UserManager um=new UserManager(); //working perfectly
return um.getUsers();
}
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<User> getUsers() { //should retrieve user only, but how?
UserManager um=new UserManager();
return ?????
}
如何防止UserDetails对象被JAXRS和JAXB扩展为第二个功能???
最佳答案
如果您从这两个函数返回相同的类型,那么jaxb不能帮助您从一种方法中隐藏信息并在第二种方法中显示。
有两种方法可以实现此目的:
1)从第二个函数返回不同的用户对象,该第二个函数不聚合用户详细信息。
2)在第二个函数中编写一个不填充用户详细信息数据的查询。