使用 Jackson 将 JPA 实体序列化为 JSON

2023-12-01

关于 Jackson/JPA 组合的问题

  1. 如果当前应用程序中有大约 20 个实体,并且我在 POM 中添加了 Jackson 依赖项,这是否意味着默认情况下所有实体都准备好转换为JSON目的?我看到一个示例项目似乎只有类注释为@JsonIgnored被跳过JSON。如果是这样,那么怎么会发生这种情况,这种机制背后的原因是什么?如何JACKSON处理那些没有任何 Jackson 注释的实体,默认情况下是否忽略?我一直在网上寻找资源,但运气不佳。

  2. 如果 20 个实体中只有一个需要映射到 JSON 对象,是否意味着我必须将 @JsonIgnore 添加到所有其他 19 个实体?如果没有,如何Jackson与要工作的实体区分开来?

Thanks.


Jackson和JPA没有任何关系。 Jackson是一个JSON解析库,JPA是一个持久化框架。杰克逊可以连载 几乎任何对象 - 唯一的要求是该对象具有某种可识别的属性(Javabean 类型属性,或用注释的裸字段@JsonProperty。还有一个额外的要求反序列化,目标类型有一个默认(无参数)构造函数。例如,这是 Jackson 可以序列化的对象:

// Class with a single Javabean property, "name"
class Person {
    private String name;

    public String getName() { return name ; }
    public String setName(String name) { this.name = name ; }
}

这是另一个:

// Class with a single field annotated with @JsonProperty
class Account {
    @JsonProperty("accountNumber")
    private String accountNumber;
}

这是另一个:

@Entity
public class User {
    @Id
    private Long id;

    @Basic
    private String userName;

    @Basic
    @JsonIgnore
    private String password;

    @Basic
    @JsonIgnore
    private Address address;

    // Constructors, getters, setters
}

最后一个示例显示了一个 JPA 实体类 - 就 Jackson 而言,它可以像任何其他类型一样被序列化。But,记下它的字段:当该对象序列化为 JSON 时,将不包含两个字段 - 'password' 和 'address'。这是因为它们已被注释为@JsonIgnore. The @JsonIgnore注释允许开发人员说“嘿,序列化这个对象是可以的,但是当你这样做时,不要在输出中包含这些字段”。此排除仅发生于此对象的字段,因此例如,如果您包含Address另一个类中的字段,但没有将该字段标记为可忽略,它将被序列化。

防止类型序列化在所有情况下,无论上下文如何,都使用@JsonIgnoreType注解。当用于类型时,它基本上意味着“我不关心该类型在哪里使用,从不序列化它”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jackson 将 JPA 实体序列化为 JSON 的相关文章

随机推荐

  • 图像中的徽标识别[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有谁知道最近在图像中的徽标识别方面所做的学术工作 请仅在您熟悉该特定主题的情况下回答 我可以自己在 Google 中搜索 徽标识别 非常感谢 任何精
  • RedHat OpenJDK 8 中的 JDK 飞行记录器向后移植

    我想问一下 是否有人知道有关 RedHat OpenJDK 8 生产版本 适用于 RHEL 7 中 JDK 飞行记录器向后移植的日期或更多信息 我已经尝试了最后一个版本 1 8 0 242 b08 但尚未包含它 并且基于这篇文章 https
  • dompdf不显示PHP文件生成的图像

    我正在使用 dompdf 生成 PDF 文件 在该文件中 我包含了一个由 PHP 使用以下命令即时生成的图像 img src image php 当我查看该页面时 我可以看到一条错误消息 未找到图像 该错误链接到据称未找到的图像 当您单击该
  • 如何隐藏浏览器中的状态栏?

    我有一个简单的问题 如何隐藏浏览器状态栏中的链接 我尝试过这个 a href http www sell com referrer 225 Click here a 摘自教程 但这不起作用 如果有人能帮助我 我会很高兴 你不能 至少在当前的
  • asio隐式链和数据同步

    当我阅读asio源代码时 我很好奇asio是如何在线程之间同步数据的 甚至是隐式链的制作 这些是 asio 中的代码 io service 运行 mutex scoped lock lock mutex std size t n 0 for
  • Swift 函数调用列表参数类型不正确

    我定义了下面的 swift 类 并尝试从视图控制器调用 sfAuthenticateUser 但是 Xcode 智能感知列出了除我定义的类型之外的错误参数类型 错误 无法将类型 String 的值转换为预期参数类型 APISFAuthent
  • 内联 Javascript(在 HTML 中)如何工作?

    我知道这是不好的做法 如果可能的话 不要编写这样的代码 当然 我们总是会发现自己处于这样的情况 巧妙的内联 Javascript 片段可以快速解决问题 我正在追求这个查询 以便充分理解编写这样的内容时会发生什么 以及潜在的陷阱 a href
  • 将全局设置应用于 pyplot 中的所有子图

    这与this and this问题 我有一系列具有非常相似设置的图形和子图 但是 我似乎无法找到同时设置它们的方法 这是一个简化版本 我通常使用更多实例 fspec plt figure 1 spC fspec add subplot 21
  • “AMOUNT1”在使用它的上下文中无效

    我在 DB2 中执行以下查询 select SUM orders totalproduct orders TOTALTAX orders totalshipping orders totaladjustment as amount1 fro
  • jquery - 所需的表单验证规则取决于

    有人可以给我介绍一下如何使用validate rules required depends 我有一些部分代码 但不确定它是如何工作的 form2 validate rules firstname required depends funct
  • ASP.NET MVC 应用程序变量?

    ASP NET 中有应用程序变量吗 我想为所有用户存储一个对象 该对象应该每 5 分钟独立更新一次 但所有用户都应该始终看到它的最新版本 有什么建议 C 吗 您可以在 ASP NET 中存储应用程序范围的数据Cache 使用以下命令将您的项
  • 用于两行和多列的 Xml 到表转换的 XSL

    我一直在尝试解决上周提出的问题的变体 用于 Xml 到表转换的 XSL 我必须将每个部分的第一个和最后一个页码输出到一个有两行的表中 我对如何将两行表与 Muenchian 分组方法集成感到困惑 XSLT 1 0 解决方案正是我所需要的 我
  • 在调查与 GPO 部署相关的错误时,如何获取 Windows Installer 的更详细/详细日志?

    我正在学习如何通过 GPO 方法从 Windows 2012 Server 将 MSI 应用程序部署到 Windows 10 客户端 在 Windows Server 中 我使用以下设置创建了一个新的 GPO 包 但是 它在Windows
  • Math.cos、sin 和 tan 在 Java 中返回不准确的值

    我正在用 Java 开发一个带有 GUI 的计算器 项目已完成 但三角函数无法正常工作 这是 cos 函数的方法 public void actionPerformed ActionEvent evt input Double valueO
  • 将变量列表单独传递给 clojure 函数

    我一直在使用 clojure 并决定创建一个结合了 mapcat 和 list 的高阶函数来模拟这种行为 Clojure gt mapcat list 1 2 3 4 5 6 7 8 1 5 2 6 3 7 4 8 我的第一次尝试是定义 m
  • jQuery 插件 .fn 问题

    我在创建 jquery 插件时似乎遇到了一些问题 我正在 firebug 控制台中测试一个简单的插件 但该功能并未按我的预期定义 这是我正在使用的代码模式 jQuery fn test function console log runs 我
  • 将地点 ID 位置传递到 Google 地图 API 中的目的地

    我试图弄清楚如何将 Google Places 位置的几何位置动态传递到路线服务请求目的地 如果我使用 service getDetails placeId ChIJy YmBMEMIocRZF8r5wPFMYU function plac
  • 如何在flume中同时使用regex_extractor选择器和多路复用拦截器?

    我正在测试 Flume 将数据加载到 hHase 中 并考虑使用 Flume 的选择器和拦截器进行并行数据加载 因为源和接收器之间的速度差距 所以 我想要用 Flume 做的是 使用拦截器 regexp extract 类型创建事件标头 使
  • 在 Angular 5 中重用 html 内容

    在开始这个问题之前 我先澄清一下我是新人 所以请耐心等待 我会尽力解释自己 在引导程序中 我可以通过以下方式生成模态 modal component html div class modal fade div class modal dia
  • 使用 Jackson 将 JPA 实体序列化为 JSON

    关于 Jackson JPA 组合的问题 如果当前应用程序中有大约 20 个实体 并且我在 POM 中添加了 Jackson 依赖项 这是否意味着默认情况下所有实体都准备好转换为JSON目的 我看到一个示例项目似乎只有类注释为 JsonIg