这似乎是另一个相当简单的事情,但我再次在如何做到这一点上苦苦挣扎。
我有一个POJO,其中包含与之关联的HTTP POST和GET方法的Jersey / JAXB注释。在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"
}
答案 0 :(得分:3)
您始终可以返回部分填充的User
对象,因为默认情况下,空值不会被编组。您甚至可以在retrieveUserFromDB
方法中实现此功能,以避免复制步骤。
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getUser(String Id) {
// Pseudo-code for retrieving user
User userFromDB = retrieveUserFromDB(user);
User user = new User();
user.setUserName(userFromDB.getUserName());
user.setUserEmail(userFromDB.getUserEmail());
Response.status(200).entity(user);
}
了解更多信息