问题标签 [jackson2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何将@JsonIdentityInfo 与循环引用一起使用?
我正在尝试使用 Jackson 2 中的@JsonIdentityInfo,如此处所述。
出于测试目的,我创建了以下两个类:
当然,天真的方法失败了:
添加@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
到 A 类和/或 B 类也不起作用。
我希望我可以序列化(然后反序列化)a
这样的东西:(虽然不太确定 JSON)
我怎样才能做到这一点?
java - 反序列化杰克逊中同名但不同类型的属性?
我有一个 REST API,它返回一个 JSON 响应:
有时它会返回:
我有一个 POJO,例如:
那么,有没有一种方法(除了编写您自己的自定义反序列化器)在Jackson2中可以帮助我channel
在 JSON 中映射以String
在它是 aString
时Channel
输入,在它是 JSON 对象时输入?
或者换句话说,杰克逊有没有一种方法可以映射type
变量而不仅仅是name
?
java - 多态反序列化杰克逊问题
爪哇:
JSON:
当我试图反序列化以上对 java 的 json 响应时,jackson 抛出以下错误。有人可以帮我解决这个问题。
spring-boot - Spring Data REST - JsonGenerationException:无法写入数字,需要字段名称
我遇到了使用 Spring Boot 启动器的 Spring Data REST 应用程序的问题。我有许多用各种关系定义的实体。我可以通过键(通常)检索它们,但是我遇到了一些相同对象的集合的问题。我想知道这是否是 JsonIdentityInfo 问题或以其他方式“破坏”唯一标识符内容以防止循环 JSON 生成。
Company 表中有大约 500 个条目,页面大小默认为 20。转到默认端点 (/company),它返回以下错误。我可以毫无问题地提取各个公司 (/company/1),包括在创建 JSON 异常时尝试生成的同一家公司。
当我进入异常堆栈时,我看到它正在尝试为 supportEmailAddress 字段生成 JSON。这是可以被多个公司行引用的行。公司也有在此表中具有电子邮件地址的联系人,但这些通常不在公司或联系人之间共享。
注意:我用类似的堆栈跟踪查看了 SO 问题,但该问题似乎围绕自定义序列化程序展开。我没有使用自定义序列化程序。
我尝试过的几件事:
- 带和不带范围属性的 JsonIdentityInfo
- JsonManagedReference 和 JsonBackReference
- @Id 字段上的 @Access(AccessType.PROPERTY)
库版本:
我已经尝试通过序列化进行调试,根本问题是序列化程序在处理 company.supportEmailAddress.key 时会感到困惑。它正在尝试输出键值,但序列化程序希望键名是下一个。当第二次引用相同的 supportEmailAddress id 时会发生错误。
更新到杰克逊 2.8.0。没变。
我在最后添加了一个简化的手写示例 JSON 来显示我所期望的结构。如您所见,这两个公司引用了相同的 supportEmailAddress 对象(相同的 id)。如果我更改为不同的 ID,它会正确呈现。我相信第二个引用实际上只会输出 id 而不是对象的其余部分,因为它已经序列化了一次。我的理解是这是一个标准功能,我没有做任何与更改杰克逊默认功能相关的事情。
简化实体(省略访问器):
公司:
所有者:
电子邮件地址:
接触:
堆栈跟踪:
示例 JSON:
java - Spring Redis JSON 序列化程序嵌入引用字段
我有一个具有许多简单属性的类(类型是int
, String
,...)。它还有一个属性,它是我的另一个类的实例。现在我想通过 Redis 发布/订阅通道发送对象。为此,我使用GenericJackson2JsonRedisSerializer
. 由于两个类都有自己的存储库,我不想每次都嵌入对象,而是只发送 ID。我认为这应该可以通过org.springframework.data.annotation.Reference
在字段中添加注释来实现。
不幸的是,这不起作用,它只是嵌入了对象。是不是我做错了什么?我需要做什么才能在序列化版本中获取对象的 ID?
谢谢您的帮助!
java - 反序列化时类似于 JsonFilter 的过滤器属性
我正在使用 Jackson 2,并在反序列化过程中对属性进行动态过滤。
我的想法是加载一个实体并阅读更改:
我试图使用@JsonView
,它适用于简单的情况。
我得到了 EntityA 的更新,读者应该只接受 EntityB 的 id,它用于通过 EntityManager 查找外部实体。
Using@JsonView
允许我处理它,但我需要为所有用例提供不同的视图类,仅更新 EntityB。
有什么方法可以在反序列化期间动态过滤属性,例如@JsonFilter
?
我找到了一个使用BeanDeserializerModifier的旧答案,但我希望有更好的方法。
java - Jackson 中的 ObjectNode 和 JsonNode 有什么区别?
根据以下文档JsonNode
:
然而,大多数 mutator 需要通过特定的子类(例如
ObjectNode
和 ArrayNode)来访问。
但是我仍然感到困惑,因为一些 stackoverflow 答案似乎可以互换使用它们。它们有什么不同的目的?
java - 使用 Jackson Mapper 将 JSON 数据映射到 Java POJO 类,希望在 listview 中获得结果
试图通过意图数据使用杰克逊解析并添加到 pojo 类并返回但无法发送和获取?
主要活动是..
这是我的 ActivityListView 类...
我的 PersonAdapeter 类看起来像这样
这是我的 PersonModel 类...
java - 如何告诉杰克逊序列化为没有属性前缀的json
在我的 Java IDE 中,我告诉 java 我为我的字段使用前缀。
结果是,在 Java 到 Json 序列化期间,我的所有属性都以 为前缀_
,有没有一种简单的方法可以做到这一点?
实际的
通缉