问题标签 [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.

0 投票
0 回答
946 浏览

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

0 投票
0 回答
130 浏览

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-Annotationshttps://github.com/FasterXML/jackson-databind/wiki/Databind-Annotations以尝试找到可能的注释帮助解决这个问题,但我很难过。

0 投票
1 回答
1033 浏览

java - 没有默认构造函数的SpringBoot反序列化

在过去的几个小时里,我阅读了许多 StackOverflow 问题和文章,但没有任何建议有帮助。我尝试了什么:

  • 将 @JsonCreator 和 @JsonProperty 添加到PersonEmployee类(链接
  • 将 @JsonDeserialize(using = EmployeeDeserialize.class) 添加到Employee类(链接
  • 将 Lombok 添加为依赖项,设置lombok.anyConstructor.addConstructorProperties=true并将 @Data / @Value 注释添加到PersonEmployee类(链接
  • 最后,我手动进行了反序列化:

    /li>

通过这种方式,我可以反序列化 JSON,但是一旦我开始我的 spring-boot-starter-web 项目并调用

我得到了很好的旧 BeanInstantiationException

我没有主意了。当我手动进行反序列化时,有人知道为什么这会起作用吗?为什么当我调用 REST 端点时它会抛出异常?

0 投票
1 回答
8962 浏览

java - 如何在 Jackson JSON(反)序列化中自定义序列化或转换具有自定义键类型的 Map 属性?

我正在序列化的实例

@JsonSerialize并且@JsonDeserialize已添加以便能够序列化具有复杂键类型的地图。转换器是

但是,注释没有效果,因为反序列化仍然失败,因为

我查看了 map 序列化,我很确定我理解了基本概念,并且期望密钥序列化器是不必要的,因为转换首先发生,并且转换后的输出是一个不需要的列表。

序列化可能存在进一步的问题,Entry然后我将通过使用不同的类(最终是我自己的类)来克服这些问题。

SSCCE 可以在https://gitlab.com/krichter/jackson-map-custom-serializer找到。

我正在使用杰克逊 2.9.4。

0 投票
0 回答
263 浏览

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>构造一个JavaTypewith TypeFactory.constructParametricType

我正在使用杰克逊 2.9.4。

0 投票
1 回答
285 浏览

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 吗?

非常感谢

0 投票
1 回答
328 浏览

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 的句柄。

想法?

0 投票
2 回答
1608 浏览

java - Jackson JsonDeserializer 将字段的反序列化委托回该字段类型的默认反序列化器

给定

我在杰克逊有以下序列化程序:

如何编写一个也委托给默认反序列化器的反序列化器?

我看过findContextualValueDeserializer()等,但我无法创建BeanProperty实例。

0 投票
0 回答
153 浏览

jackson - Jackson:反序列化使用 findTypedValueSerializer() 序列化的对象

在我的 JsonSerializer 中,我有以下代码:

这很好地序列化为这个 JSON:

因为我的班级是这样注释的:

如何使用我的反序列化 JSON 文本JsonDeserializer


此代码引发空指针异常:

0 投票
1 回答
25 浏览

json - 使用杰克逊反序列化这个 Json 对象?

我一直在尝试反序列化从此API收到的数据:

这是 POJO 类:

当我尝试使用反序列化时:

我收到此错误:

我已经看到许多包含此错误的问题,但我无法为这个特定用例找出解决方案。可以注意到,totalDownloads对象是动态的,即其内容不是恒定的。