Jackson,序列化引用的一个属性

2023-11-22

当序列化具有其他对象引用的Java对象时,我只需要序列化嵌套对象的一个​​属性(通常是外键,因此序列化对象引用的“id”属性)。英戈尔其他一切。

例如,我有两个类需要序列化为 JSON 和 XML(为了清楚起见,删除了 JPA 注释):

关系:用户->(一对多)地址信息; 另外:地址信息 ->(一对一)用户

@XmlRootElement
public class User {
    private String id;
    private String firstName;
    private String lastName;
    private String email;
    private AddressInformation defaultAddress;
    private Set<AddressInformation> addressInformation;

    public User() {
    }

    @JsonProperty(value = "id")
    @XmlAttribute(name = "id")
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @JsonProperty(value = "firstname")
    @XmlAttribute(name = "firstname")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @JsonProperty(value = "lastname")
    @XmlAttribute(name = "lastname")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @JsonProperty(value = "email")
    @XmlAttribute(name = "email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @JsonIgnore
    public Set<AddressInformation> getAddressInformation() {
        return addressInformation;
    }

    public void setAddressInformation(Set<AddressInformation> addressInformation) {
        this.addressInformation = addressInformation;
    }

    @JsonProperty(value = "defaultaddress")
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    public AddressInformation getDefaultAddress() {
        return defaultAddress;
    }

    public void setDefaultAddress(AddressInformation defaultAddress) {
        this.defaultAddress = defaultAddress;
    }
}

地址信息:

@XmlRootElement
public class AddressInformation  {
    private String id;
    private String address;
    private String details;
    private User user;

    @JsonProperty(value = "id")
    @XmlAttribute(name = "id")
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @JsonProperty(value = "details")
    @XmlAttribute(name = "details")
    public String getDetails() {
        return details;
    }

    public void setDetails(String details) {
        this.details = details;
    }

    @JsonProperty(value = "address")
    @XmlAttribute(name = "address")
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public AddressInformation() {
        super();
    }
}
enter code here

例如,当序列化 User 时,我需要:

{
  "id" : "idofuser01",
  "email" : "[email protected]",
  "status" : "OK",
  "firstname" : "Filan",
  "lastname" : "Ovni",
  "defaultaddressid" : "idofaddress01",
}
enter code here

序列化AddressInformation时:

{
  "id" : "idofaddress01",
  "address" : "R.8. adn",
  "details" : "blah blah",
  "userid" : "idofuser01",
}

我努力了@JsonManageReference & @JsonBackReference没有成功。正如你所看到的,我也尝试过@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")


刚刚找到了一种使用 Jackson 2.1+ 的方法。

用(这将仅选择id的属性AddressInformation):

@JsonProperty(value = "defaultaddressid")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true) 
public AddressInformation getDefaultAddress() {
    return defaultAddress;
}

序列化效果非常好。

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

Jackson,序列化引用的一个属性 的相关文章

  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 使用过滤器@ComponentScan所有包的危险

    我现在正在开发一个概念应用程序 我想使用组件扫描来使用特定的自定义 Spring 元注释来获取类路径上任何位置的所有类 我的注释如下所示 Target value ElementType TYPE Retention value Reten
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在 Java 中测试一个类是否正确实现了 Serialized(不仅仅是 Serialized 的实例)

    我正在实现一个可序列化的类 因此它是一个与 RMI 一起使用的值对象 但我需要测试一下 有没有办法轻松做到这一点 澄清 我正在实现该类 因此在类定义中添加 Serialized 很简单 我需要手动序列化 反序列化它以查看它是否有效 我找到了
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo

随机推荐

  • 如何实现自动换行?

    XNA有Spritefont类 它有一个MeasureString方法 可以返回一个物体的宽度和高度string 我试图了解如何创建一个方法来有效地返回一个字符串Environment Newline插入到正确的位置 以便适合特定的宽度和高
  • ActionFilter Response.StatusCode 始终为 200

    我正在尝试设置一个动作过滤器 仅在以下情况下执行某些操作StatusCode of the HttpContext Response is 302 我希望能够在OnActionExecuting方法 但是StatusCode总是200 Ac
  • Python - 如何使用日期时间重命名文本文件

    我正在使用 Python v2 x 想知道如何重命名已知的文本文件 例如 text txt 以包含当前日期和时间 任何帮助将不胜感激 os rename text txt time strftime Y m d H M S txt 请注意
  • 插入后导航属性返回 null

    我已将应用程序从 EF4 迁移到 EF5 我将以下代码与以前的版本一起使用来获取新添加项目的相关实体 Student s new Student s Name name s ClassID cID db Students Add s db
  • 从数据框中提取带有条件的列名称

    dput new structure list ID c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 A1 c 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0
  • exec() 和 phantomjs 的绝对路径问题

    我在用着幻影JS用于以编程方式截取网页屏幕截图的目的 我的网络服务器在 Linux 64 位上运行 场景 My test php file exec phantomjs version o e print r o echo e I open
  • 对“kill”的未定义引用

    我用 C 语言为 ARM7 嵌入式系统开发了一个应用程序 现在我想用 C 编译并链接它 以便使用一些 C 功能 为此 我正在使用mipsel elf g 代替mipsel elf gcc 我可以用以下命令编译我的代码mipsel elf g
  • 为什么 ng-hide 不适用于自定义指令?

    我正在阅读 angularjs org 上的开发人员指南的指令部分 以刷新我的知识并获得一些见解 我试图运行其中一个示例 但指令 ng hide 不适用于自定义指令 这里是jsfiddle http jsfiddle net D3Nsk
  • 如何在 iOS 模拟器中测试动态类型(较大字体)

    可以手动更改 iOS 中的动态类型设置 设置 gt 常规 gt 辅助功能 gt 较大文本 但这似乎在当前的模拟器 撰写本文时为 v9 3 中不起作用 并且手动执行此操作并不是需要自动化的解决方案 问题 有没有办法启动具有动态类型设置的应用程
  • Silverlight构造函数注入视图模型+设计模式

    我正在尝试在 Silverlight 4 中编写可测试的 ViewModel 我目前使用 MVVM light 我使用 AutoFac IoCContainer 做得很好 但是 要注入绑定到视图的 ViewModel 的构造函数 我有以下构
  • java 使用套接字发送文件

    我正在尝试使用 Java 将文件从一台计算机发送到另一台计算机 我编写了下面的代码 如果发送方和接收方都在同一台计算机上启动 则它可以正常工作 但如果它们在不同的计算机上工作 则接收到的文件大小比原始文件大并且已损坏 注意 我正在尝试传输最
  • 没有参数的模板类“template<>”是什么意思?

    不带参数的模板类是什么意思 例如 我们采用一个计算阶乘的模板类 其模板参数为 N N 基本上 这是一个类 template
  • 开始使用 PM2 时如何将生产模式添加到 sailsjs 应用程序

    要在生产模式下启动 sailsjs 您需要附加 prod Run node app js prod 我使用 PM2 和一个简单的 json 文件进行设置 其中包含进程名称和脚本名称 以启动节点进程 我如何使用 PM2 传递生产参数 Read
  • 使用 JavaScript 的 FileReader 接口检测文件的内容类型

    我一直在为 Web 应用程序中的纯文本文件设置导入脚本 我的脚本如下 function dataImport files confirm Are you sure you want to import the selected file T
  • 如何从字符串traceid创建opentelemetry范围

    我知道我们要使用上下文传播来获取作为彼此子级创建的父级 Traceid 和 Span 但我的发布者正在使用标头 nats 不是 http 我的消息代理使用标头 我将traceid和spanid设置为出站请求中的标头 发送消息 然后订阅者应该
  • 使用 FOR XML 进行行串联,但具有多个列?

    我经常使用如下查询 SELECT FROM ThisTable OUTER APPLY SELECT SELECT SomeField AS data FROM SomeTable WHERE SomeTable ID ThisTable
  • XNA - 同时创建大量粒子

    是时候提出另一个 XNA 问题了 这次纯粹是从技术设计的角度来看 我的情况是这样的 我创建了一个基于 GPU 计算的粒子引擎 虽然远未完成 但它可以工作 我的 GPU 可以毫不费力地轻松处理 10k 个粒子 如果我可以添加更多粒子 我也不会
  • OpenCV:在 Python 中从 NumPy 转换为 IplImage

    我有一个使用 cv2 imread 加载的图像 这将返回一个 NumPy 数组 但是 我需要将其传递到需要 IplImage 格式的数据的第 3 方 API 我已经搜索了我能搜索到的所有内容 找到了从 IplImage 转换为 CvMat
  • 如果孩子不存在,则删除父记录

    我正在表变量中创建菜单和子菜单 典型的同表父子记录 对于所有顶部菜单 ParentID coll 均为空 对于他们的子菜单 ParentID 将是这些父菜单的 MenuId 取决于构建的用户日志类型 现在我要做的是 如果特定父级没有任何子级
  • Jackson,序列化引用的一个属性

    当序列化具有其他对象引用的Java对象时 我只需要序列化嵌套对象的一个 属性 通常是外键 因此序列化对象引用的 id 属性 英戈尔其他一切 例如 我有两个类需要序列化为 JSON 和 XML 为了清楚起见 删除了 JPA 注释 关系 用户