当前位置: 首页 > 知识库问答 >
问题:

序列化Jackson中没有数据的对象

韩经武
2023-03-14

是否可以在Jackson中只使用注释序列化没有字段的对象?当我尝试序列化这样一个没有注释的对象时,我得到:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class [redacted].SubjectObjectFeatureExtractor and no properties discovered to create BeanSerializer 

我检查了Jackson注释列表,但没有看到将类注释为没有可序列化数据的方法。我尝试将@jsonCreator放在空构造函数上(不希望它工作,因为它是一个反序列化注释),但我得到了同样的错误。没有可将@JSONProperty放置在其上的访问器或字段。有什么想法吗?

更新:这样做的原因是我有一个对象列表,这些对象表示可以应用于某种类型的数据的转换。其中一些转换是由需要序列化的参数定义的,但其中一些是无参数的(所讨论的无数据对象)。我希望能够序列化和反序列化这些转换的序列。另外,我使用defaulttyping.non_final,这样类名将被序列化。

更新:一个示例类将是

class ExtractSomeFeature implements FeatureExtractor<SomeOtherType> {
    public void extractFeature(SomeOtherType obj, WeightedFeatureList output) {
          // do stuff
    }
 }

我并不特别关心这方面的JSON是什么样子的,只要我能够正确地反序列化list 。我的印象是,使用默认类型,预期的JSON将如下所示:

['com.mycompany.foo.ExtractSomeFeature', {}]

featureextractor的其他子类将具有实际参数,因此它们可能看起来类似于:

[`com.mycompany.foo.SomeParameterizedFeature', {some actual JSON stuff in here}]

我想我可以在某些ToJsonString()方法上使用@JsonValue来返回{},但如果可能的话,我希望对将要创建FeatureExtractor子类的最终用户隐藏此类攻击。

共有1个答案

谷梁博易
2023-03-14

禁用serializationfeature.fail_on_empty_beans的答案是全局的,因此您可能不希望应用它。

添加任何序列化注释的答案显示了正确的修复方法(如:serializationfeature.fail_on_empty_beans的Javadoc建议的),但只能使用hackish或不相关的注释。

只需加上…

@JsonSerialize

…对我的班级(连家长徐峥都不放过,免得独自争吵!)我能够产生同样的效果(正如serializationfeature.fail_on_empty_beans的Javadoc所指示的那样)。

 类似资料:
  • 主要内容:1 编写核心类,2 运行测试本文讲解如何将一个Java对象序列化为一个json文件,然后读取该json文件读取回对象。在下面的示例中,我们创建Student类。使用Jackson存储到一个student.json文件,该文件拥有Student对象的JSON表示形式。 1 编写核心类 MainApp: 2 运行测试

  • 我想将包含另一个空值POJO的POJO序列化为JSON。 例如,给定: 连载之后,它看起来会是这样的 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局适用于每个对象,而无需编写自定义代码。

  • 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局地用于每个对象,而无需编写自定义代码。

  • 我正在尝试使用spring data redis的Jackson序列化功能。我正在构建一个ObjectMapper,并使用GenericJackson2JsonRedisSerializer作为redisTemplate的序列化程序: 我正试图保存一个样本bean: 以及该bean的存储库: 然后我尝试将bean写入Redis: 我希望redisTemplate使用序列化程序将SampleBean

  • 问题内容: 我有一堂课 并希望将其序列化为 如何实现此目标(以及如何反序列化为对象? 我正在尝试使用 但显然最终会引号过多。 也不起作用,因为它不能创建足够的报价。 问题答案: 我发现了一种使用JsonSerializer的方法: 本类需要了解这一点: 反序列化非常相似: 这也需要在Foo类上进行注释:

  • 我所在的团队使用杰克逊数据绑定来处理发送到 REST API 和从 REST API 发送的 JSON 的序列化和反序列化。该 API 广泛使用一种臭名昭著且难以处理的模式,我们称之为“键值”。不幸的是,JSON的格式超出了我们的控制范围,所以我试图找到一种简单易行的好方法来处理序列化和反序列化它们。 键值总是以下列模式出现: 值得注意的是,它们始终采用数组的形式,其中包含单个对象,并且对象中 k