gpt4 book ai didi

java - 更改 Jackson 中的默认序列化行为

转载 作者:行者123 更新时间:2023-11-30 09:23:09 26 4
gpt4 key购买 nike

我正在使用 Jackson 库编写自定义序列化器,并将它们注册到自定义 ObjectMapper 中。但是,我还想将默认序列化更改为在未编写更具体的自定义序列化时仅输出对象的字符串表示形式。

例如,假设除了默认序列化程序之外,我还为类“Map”和“Entry”编写了自定义序列化程序。然后我的自定义 ObjectMapper 中的序列化模块可能如下所示:

SimpleModule module = new SimpleModule("module", new Version(0, 1, 0, "alpha", null, null));
module.addSerializer(Entry.class, new EntryJsonSerializer());
module.addSerializer(Map.class, new MapJsonSerializer());
module.addSerializer(Object.class, new DefaultJsonSerializer());
this.registerModule(module);

但是,我发现该模块将使用 DefaultJsonSerializer 来序列化 Map 和 Entry 对象(因为它们也是 Object 对象)。

如何更改默认序列化行为,同时确保 Entry 和 Map 对象按预期序列化?

最佳答案

问题可能是值的实际类型(例如,String)用于定位序列化程序。

一种解决方案是为值类型注册序列化程序(如果您知道的话)。

或者,您可以强制使用静态类型;这将使序列化器查找使用声明的(静态)类型,而不是实际的运行时类型。这可以通过以下方式完成:

objectMapper.enable(MapperFeature.USE_STATIC_TYPING);

关于java - 更改 Jackson 中的默认序列化行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com