这似乎是另一件相当简单的事情,但我再次为如何做到这一点而苦苦挣扎。
我有一个 POJO,带有 Jersey/JAXB 注释,它具有与之关联的 HTTP POST 和 GET 方法。在 POJO 上执行 POST 时,请求正文作为 JSON 发送,本质上是对 POJO 进行建模。执行 GET 时,我想返回 POJO,但只返回 POJO 属性的子集。
我尝试在我不想要的 GET 属性上使用 @XmlTransient,但是在 HTTP POST 期间我无法使用这些属性。
首先,这是我的 POJO (User.java)
import javax.xml.bind.annotation.*
@XmlRootElement
public class User {
private String userName;
private String userEmail;
private String userType; // Do not return this property in GET
private String userTmpPassword; // Do not return this property in GET
// User constructor
public User(String userName,...) {
this.userName = userName;
//...etc...
}
// getters and setters with @XmlElement on each attribute
//...etc...
@XmlElement(name="user_name")
public String getUserName() {
return userName;
}
public String setUserName() {
return userName;
}
//...etc...
}
这是我的 RESTful 服务类:
public class userService{
@POST
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getUser(User userInfoAsJSON) {
User user = new User(userInfoAsJSON.getUserName(), ...);
// pseudo-code for persisting User
writeUserToDB(user);
return Response.status(200);
}
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getUser(String Id) {
// Pseudo-code for retrieving user
User user = retrieveUserFromDB(user);
Response.status(200).entity(user);
}
}
正如预期的那样,我对 HTTP GET 的 JSON 响应返回了 User 的所有属性,如下所示:
{
"user_name": "John Doe",
"user_email": "john_doe@johndoe.com",
"user_type": "Admin",
"user_tmp_password": "abc_xyz"
}
然而,我只想在 JSON 响应中返回几个属性:
{
"user_name": "John Doe",
"user_email": "john_doe@johndoe.com"
}