我有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)在第二个函数中编写一个不填充用户详细信息数据的查询。

10-04 19:53