我正在使用Jackson来序列化我的Java POJO类。除了字段,我在Java POJO中还有,我想在JSON中添加一些额外的信息。我正在编写我自己的自定义CustomClassSerializer
。如果我使用此类并注册到ObjectMapper
,则会收到错误:
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Type id handling not implemented for type org.acme.Tiger (by serializer of type org.acme.CustomModule$CustomClassSerializer)
我不能理解这里可能出了什么问题。如果我删除自定义注册模型,那么一切都会完美地工作。
有人能告诉我这个问题的原因吗?我目前使用的是Jackson2.13.2最新版本的依赖项:jackson-core, jackson-databind, jackson-annotations, jackson-datatype-jdk8
:
下面是示例代码:
第一个问题
我想知道上述例外的原因是什么。
1条答案
按热度按时间vulvrdjw1#
作为一个面向Gson的人,我不认为我能写出真正有效的Jackson代码,但我想你可以结合下面的Q/A来解决你的问题:
此外,我还想重构您的代码(很多),以便通过使用策略设计模式(在必要的地方)使其灵活,并演示它如何使用简单的单元测试工作。
第一个
我希望上面的代码是非常自我解释的。如果你需要使用额外的属性名转换,你可能还想增强代码,以便使
identityNameTransformer
也可以注入。与主题无关,但在您的问题中重复JSON对象属性名称(如
my_extra_field
)可能被认为是不推荐的(不确定是否易受攻击)。Does JSON syntax allow duplicate keys in an object?。