gpt4 book ai didi

java - Jersey/JAXB : Use same POJO for HTTP POST and GET, 但在 JSON 响应中仅返回 GET 属性的子集。

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:42 25 4
gpt4 key购买 nike

这似乎是另一件相当简单的事情,但我又在为如何去做而苦苦挣扎。

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com