这似乎是另一件相当简单的事情,但我再次为如何做到这一点而苦苦挣扎。
我有一个POJO,带有Jersey/JAXB注释,其中有与之关联的HTTP POST和GET方法。 在 POJO 上执行 POST 时,请求正文以 JSON 形式发送,实质上是对 POJO 进行建模。 执行 GET 时,我想返回 POJO,但只返回 POJO 属性的子集。
我尝试在我不想要的 GET 属性上使用 @XmlTransient,但随后我无法在 HTTP POST 期间使用这些属性。
首先,这是我的POJO(用户.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_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"
}
您始终可以返回部分填充的 User
对象,因为默认情况下不对 null 值进行封送。 您甚至可以在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);
}
欲了解更多信息
- http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html