问题标签 [jackson-databind]
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 - 杰克逊序列化列表中缺少@JsonTypeInfo 属性
Jackson 2.9.2 允许在超类上指定一个属性来区分子类的类型JsonTypeInfo
,例如
可以使用 getter 和 setter对MyEntity
具有扩展MySuperEntity
和添加属性的类进行序列化String
但是,当放入LinkedList
生成的 JSON 输出时,它不具有以下type
属性:
由于失败
SSCCE 可以在https://gitlab.com/krichter/jackson-type-in -list 找到,测试输出说明了https://gitlab.com/krichter/jackson-type-in-list/- /工作/55921526。
kotlin - 反序列化数组时是否有更简单的方法来强制长度> 0?
假设我收到一些如下所示的 JSON:
可能还有其他一些领域,但我正在简化这个问题。我想将此 JSON 反序列化为以下类的对象:
我的要求是使用 LocalTime 的自然顺序对 timesOfDay 列表进行排序,并且列表不为空。
到目前为止,我有一个自定义反序列化器,专门用于 LocalTime 列表:
我正在寻找一种更简单的方法来强制列表非空。我可以在 TimesContainer 的构造函数中对列表进行排序。
在之前的尝试中,我在 TimesContainer 的构造函数中引发了异常,但是这导致了 InvalidDefinitionException,这意味着类定义有问题。因此,我认为这不是正确的方法,因为类定义是正确的。
我还考虑在反序列化后单独验证列表,但我意识到这意味着我不再利用 Jackson 来准确地通知用户他们的 JSON 哪里出错了。
到目前为止,我正在使用以下库:
- com.fasterxml.jackson.module:jackson-module-kotlin:2.9.+
- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.+
我检查了https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations和https://github.com/FasterXML/jackson-databind/wiki/Databind-Annotations以尝试找到可能的注释帮助解决这个问题,但我很难过。
java - 没有默认构造函数的SpringBoot反序列化
在过去的几个小时里,我阅读了许多 StackOverflow 问题和文章,但没有任何建议有帮助。我尝试了什么:
- 将 @JsonCreator 和 @JsonProperty 添加到Person和Employee类(链接)
- 将 @JsonDeserialize(using = EmployeeDeserialize.class) 添加到Employee类(链接)
- 将 Lombok 添加为依赖项,设置lombok.anyConstructor.addConstructorProperties=true并将 @Data / @Value 注释添加到Person和Employee类(链接)
最后,我手动进行了反序列化:
/li>
通过这种方式,我可以反序列化 JSON,但是一旦我开始我的 spring-boot-starter-web 项目并调用
我得到了很好的旧 BeanInstantiationException
我没有主意了。当我手动进行反序列化时,有人知道为什么这会起作用吗?为什么当我调用 REST 端点时它会抛出异常?
java - 如何在 Jackson JSON(反)序列化中自定义序列化或转换具有自定义键类型的 Map 属性?
我正在序列化的实例
和
和
@JsonSerialize
并且@JsonDeserialize
已添加以便能够序列化具有复杂键类型的地图。转换器是
和
但是,注释没有效果,因为反序列化仍然失败,因为
我查看了 map 序列化,我很确定我理解了基本概念,并且期望密钥序列化器是不必要的,因为转换首先发生,并且转换后的输出是一个不需要的列表。
序列化可能存在进一步的问题,Entry
然后我将通过使用不同的类(最终是我自己的类)来克服这些问题。
SSCCE 可以在https://gitlab.com/krichter/jackson-map-custom-serializer找到。
我正在使用杰克逊 2.9.4。
java - 绕过通用映射序列化程序的运行时类型擦除
我正在开发一个序列化器,Map<K,V>
它将映射条目序列化为 JSON 对象数组,key
并且value
能够包含任意类型(包括键的复杂类型)。我有
除了在运行时new TypeReference<List<Entry<K,V>>>
解析为List<Entry<Object, Object>>
,因此嵌套Entity2
的 s 被反序列化为Map
.
所以,我想知道是否有办法实现通用解决方案,例如传递Class<? extends K>
和Class<? extends V>
构造一个JavaType
with TypeFactory.constructParametricType
。
我正在使用杰克逊 2.9.4。
jboss - JBOSS AS 7 上的 keycloak 管理客户端
我无法从 JBOSS AS 7.1 REST 端点调用 keycloak-admin-client。我可以从 JUNIT test 调用相同的服务,但是当我尝试从 REST 端点做同样的事情时,我遇到了错误:
当我从 jackson2 -> jackson 更改依赖项时,我在 JUNIT 测试中遇到同样的错误
我猜它与杰克逊提供者有某种联系,但我尝试了一切,从在部署结构中排除杰克逊到使用不同的旧版本的 keycloak 管理客户端和 keycloak-adapter-bom(2.5.5 或 3.4.3)。
任何人都可以为 JBOSS AS 7.1 的 keycloak-admin-client 提供工作 pom.xml 吗?
非常感谢
java - FasterJackson - 无法将 Map 中的键(JSON 字符串)转换为使用 AnyGetter/AnySetter 注释的对象
我正在尝试通过 FasterJackson 的 ObjectMapper.convertValue(map, ComplexRecord.class) 方法从 Map(String, Object) 反序列化对象。
我的目标对象中包含许多其他对象。唯一有问题的对象是使用 FasterJackson(杰克逊)的 AnyGetter/AnySetter 方法的嵌入式“AnyObject”对象。
AnyObject 实例适用于 FasterJackson 的所有其他用例,但目前,它涉及更多“ComplexRecord”反序列化。
这是它的样子:
当我尝试使用 ObjectMapper.convertValue(map, ComplexRecord.class) 时,由于此错误,它无法反序列化“数据”字段:
我想为此找到一个非常干净的解决方法。这个问题似乎源于我使用 Map 的复杂源中的 ObjectMapper.convertValue 方法,其中键“数据”最初可作为字符串使用。如果我执行类似的操作,但使用 ObjectMapper.readValue() 而不是 ObjectMapper.convertValue(),那么反序列化到 AnyObject 就可以了。
由于我没有将 Map 的源对象更改为可以与 ObjectMapper.readValue() 方法一起使用的东西的奢侈,我可能只剩下几个选择。
我发现的一个选项是使用 FasterJackson 的 Custom Deserializer。我看到的唯一问题是没有明确的方法可以访问提供给 Deserializer 的内部 ObjectMapper。当我调试反序列化器时,我确实看到 JsonParser.getCodec() 是 ObjectMapper,但即使尝试在自定义反序列化器中执行 readValue,反序列化也会失败并出现相同的错误。IE
然而,以下一组调用工作得很好:
除了这是反序列化的 2 步过程,而不是 1 步过程;唯一的另一个问题是我没有一种干净的方法来使用上面提到的“objMapper”(ObjectMapper)实例,而无需将编解码器转换为 ObjectMapper 实例。
这对我来说似乎是一个黑客,但我想听听你的想法,并看看是否有其他更友好的解决方案可用。
还有一些想法/选项,但我想对此发表公正的意见,看看是否有更简单的方法来处理这种类型的“复杂”转换。
最理想的结果是强制将字符串强制转换为我想要的类型——AnyObject。通过注释或一些非常简单的策略。
但是如果我必须通过自定义反序列化器来处理这个问题,我的偏好是能够以一种干净的方式获得进程内 ObjectMapper 的句柄。
想法?
java - Jackson JsonDeserializer 将字段的反序列化委托回该字段类型的默认反序列化器
给定
我在杰克逊有以下序列化程序:
如何编写一个也委托给默认反序列化器的反序列化器?
我看过findContextualValueDeserializer()
等,但我无法创建BeanProperty
实例。
jackson - Jackson:反序列化使用 findTypedValueSerializer() 序列化的对象
在我的 JsonSerializer 中,我有以下代码:
这很好地序列化为这个 JSON:
因为我的班级是这样注释的:
如何使用我的反序列化 JSON 文本JsonDeserializer
?
此代码引发空指针异常:
json - 使用杰克逊反序列化这个 Json 对象?
我一直在尝试反序列化从此API收到的数据:
这是 POJO 类:
当我尝试使用反序列化时:
我收到此错误:
我已经看到许多包含此错误的问题,但我无法为这个特定用例找出解决方案。可以注意到,totalDownloads
对象是动态的,即其内容不是恒定的。