问题标签 [jackson-modules]

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 投票
3 回答
13629 浏览

jackson - 如何确保 Spring Boot 额外的 Jackson 模块具有相同的版本?

Spring Boot 已经包含了核心的 Jackson 依赖项 + 其他几个。

如果您想添加 org.json 或 jsr-353 数据绑定模块,您需要明确定义这些附加模块的版本。

有没有办法引用其他杰克逊模块的相同版本?我想避免任何兼容性问题。

0 投票
1 回答
1426 浏览

java - Jackson 和 Guava 数据类型模块:忽略缺少的字段,但序列化显式空值

我将 RESTful 端点的测试数据存储在 json 中。我会将测试数据反序列化为 POJO 以传递给 REST Assured 进行测试。在底层,REST Assured 在构造请求对象时使用 Jackson 序列化 POJO。

我正在使用 Guava 数据类型模块来区分 json 中存在但设置为 null 的字段和根本不存在的字段。当json使用jackson和可选字段的guava数据类型模块反序列化为POJO时,json中缺少的字段在POJO中设置为null,而json中存在的那些字段值明确设置为null到 Optional.absent()。

当 POJO 由 Rest Assured 序列化(在 Jackson 的帮助下)构造 HTTP Reguest 对象时,我希望忽略“缺失”字段(POJO 中的 null),但那些存在的字段,但是显式设置为 null(POJO 中的 Optional.absent())以进行序列化。我不能使用 @JsonInclude(Include.NON_NULL) 注释,因为它排除了这两种情况,因为 Guava 数据类型模块中的 Serializer for Guava 数据类型处理它们的方式。我想要一种方法来覆盖此行为,同时保留我使用模块的能力。我不知道该怎么做。

这是我正在谈论的示例:

一旦上面的 json String 被反序列化,上面的 POJO 就会像这样被实例化:

当 POJO 被序列化回 json 时,我希望输出是测试数据中的内容:

但是,我得到的是:

如果我使用@JsonInclude(Include.NON_NULL),我会得到:

更新:

所以,我基本上破解了模块来做我想做的事。以下是我所做的更改:

GuavaOptionalSerializer中,我更改为仅在值是而不是如果是或isEmpty(Optional<?> value)时才返回 true 。nullnullabsent

GuavaOptionalBeanPropertyWriter我更改了serializeAsField方法以首先处理抑制空值然后处理null值:

现在,如果我想包含absent字段(明确设置为null)并排除简单“缺失”的字段,我使用@JsonInclude(Include.NON_EMPTY) annotation.

0 投票
1 回答
9980 浏览

java - 用于地图序列化的杰克逊模块

我有一个包含 Map (带有非 String 键)和其他一些字段的类。

我想使用杰克逊序列化和反序列化这个类。我看到了一种不同的方法,并决定尝试使用杰克逊模块

我关注了这篇文章并扩展了 JsonDeserializer 和 JsonSerializer。问题是应该键入这些类,所以它应该看起来像

KeySerializer 也是如此。

然后添加到模块:

但这显然是错误的,因为我遇到了一个例外:

我可以将我的序列化器和反序列化器输入到MyClass,但是我不得不手动解析所有这些,这是不合理的。

更新:

我设法通过使用注释绕过代码中的模块创建

但是我必须自己从 toString() 输出序列化/反序列化整个映射结构。所以尝试了不同的注释:

MyKeyDeserializer 扩展org.codehaus.jackson.map.KeyDeserializer并覆盖该方法的位置

然后手动反序列化我的密钥,但再次从我的密钥类的 toString() 输出。

这不是最优的(这种依赖于 toString() 方法)。有没有更好的办法?

0 投票
2 回答
724 浏览

json - jackson-module-scala:如何读取子类型?

有了这个jackson-module-scala包装

我尝试阅读子类型(这只是没有实际工作的简化用例):

但是这种尝试会导致错误:

任何人都可以建议一种解决方法来获得预期的行为吗?

0 投票
1 回答
5447 浏览

java - @JsonCreator 和通过模块的 mixin 不适用于第 3 方类

我正在尝试反序列化没有默认无参数构造函数的 java.net.HttpCookie 并得到: org.codehaus.jackson.map.JsonMappingException: No适合类型 [simple type, class java.net. HttpCookie]:无法从 JSON 对象实例化(需要添加/启用类型信息?)在 [Source: java.io.StringReader@5a395674; 行:1,列:35

这是 jackson-mapper-asl v 1.9.13

我发现Jackson 3rd Party Class With No Default Constructor并尝试通过 getDeserializationConfig 和 using 模块使用他们的解决方案。我在下面介绍模块代码。

在服务器端点的构造函数中,我有以下内容:

我看到在我的日志中的反序列化异常之前记录了“设置混合注释”。我没看到“混心叫!” 曾经(尽管我不确定是否会调用 mixin 构造函数中的代码)。有人可以告诉我我的错误吗?我需要注释 java.net.HttpCookie 中的所有字段吗?

http://docs.oracle.com/javase/7/docs/api/java/net/HttpCookie.html

0 投票
5 回答
27983 浏览

java - jackson - 不要序列化惰性对象

我有一个实体:

然后我有一个控制器,其目的是检索书籍,我的问题是,流派字段包含在我的控制器的 json 响应中。当杰克逊序列化对象时,我有什么办法可以排除那些延迟加载的字段?

这是我的 ObjectMapper 的配置:

谢谢!

我不能将它标记为 JsonIgnore,因为它将永远脱离序列化框。有时我需要检索书籍的类型,到那时我将在我的查询中使用“fetch join”,这样它就不会为空。

0 投票
1 回答
2938 浏览

java - 使用 Jackson 在 JAVA 中生成自定义 JSON Schema

当 POJO/Bean 在其中嵌套参数时,我对此并不陌生,并且正在为用例而苦苦挣扎。

要求-

使用 Jackson(最新版本可以)为 JAVA Bean/POJO 类生成 JSON 模式,以便它正确包含嵌套对象的结构,并且还希望向嵌套的 pojos 添加自定义属性(在我的情况下,想要添加一个每个嵌套 POJO 参数的完全分类的类名属性)。

用例-

说,我有一个 Person 类,如下所示。我正在使用这个人作为我的一些操作的参数。-

例如,当上面的 Person 类用作参数时,当前会生成以下 JSON Schema -

Person 类有一些多值数据结构,如MAPARRAY,也可以有嵌套的POJO所以我不想为这些类型的BEAN/POJO类生成 JSON 模式,并且还想为每个嵌套的POJO/BEAN放置一个“类名”节点,具有完全分类的类名

我为此经历了很多事情,但我无法为使用杰克逊的这种情况找出一个捷径。

这里要注意的要求是将“classname”属性放在嵌套的 POJO 属性模式中。

这个问题肯定与此有关 - How to traverse generated json schema using jackson and put custom attribute in json schema

0 投票
0 回答
909 浏览

json - 基于hibernate验证器注解的Json验证模式生成

我有一个用休眠验证器注释注释的 POJO:

从这个 POJO 我希望能够生成一个看起来像这样的模式:

有没有能够做到这一点的图书馆?

我正在查看https://github.com/FasterXML/jackson,但我没有看到对此的开箱即用支持。

指针将非常受欢迎!谢谢!

0 投票
4 回答
1646 浏览

java - Jackson:json 模式引用了其他模式,可以禁用吗?

当我使用 Jackson Json-Schema-Module 时,我的模式是使用相互指向的引用生成的。

考虑这个模式:

这是 POJO1 中的一个属性对象

我在 POJO2 中有相同的属性对象,当两个模式都生成时,我在 POJO2 中得到以下内容:

但我希望 POJO2'a 模式中的这个属性与 POJO1 模式中的相同,我不想要引用。这可以禁用吗?或者有解决方法吗?

这是我使用的代码:

起初我以为如果为每个模式构造使用不同的 ObjectMapper 实例,我会得到我想要的,但事实并非如此,显然有某种缓存,我对这些事情的了解还不够深,无法得出正确的结论。

谢谢!

0 投票
4 回答
96692 浏览

json - 从 Java 类生成 JSON 模式

我有一个 POJO 类:

是否有任何注释或开发框架/API 可以将 POJO 转换为 JSON 模式,如下所示:

我还可以"Required" : "Yes"通过在 POJO 上指定一些注释或配置来扩展模式以添加信息,例如每个字段的描述等,并且可以生成如下所示的 JSON 模式: