这似乎是另一件相当简单的事情,但我又在为如何去做而苦苦挣扎。
我有一个 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"
}
最佳答案
您始终可以返回部分填充的 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);
}
了解更多信息
关于java - Jersey/JAXB : Use same POJO for HTTP POST and GET, 但在 JSON 响应中仅返回 GET 属性的子集。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107874/