Jersey/JAXB:对 HTTP POST 和 GET 使用相同的 POJO,但在 JSON 响应中仅返回 GET 属性的子集。

2024-02-16

这似乎是另一件相当简单的事情,但我再次为如何做到这一点而苦苦挣扎。

我有一个带有 Jersey/JAXB 注释的 POJO,该注释具有与其关联的 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": "[email protected] /cdn-cgi/l/email-protection",
  "user_type": "Admin",
  "user_tmp_password": "abc_xyz"
}

然而,我只想在 JSON 响应中返回几个属性:

{
  "user_name": "John Doe",
  "user_email": "[email protected] /cdn-cgi/l/email-protection"
}

您始终可以返回部分填充的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);
  }

了解更多信息

  • http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey/JAXB:对 HTTP POST 和 GET 使用相同的 POJO,但在 JSON 响应中仅返回 GET 属性的子集。 的相关文章

  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐