【问题标题】:Java Jackson Always Serialize One Type As AnotherJava Jackson 总是将一种类型序列化为另一种类型
【发布时间】:2020-06-15 16:32:46
【问题描述】:

有没有办法告诉杰克逊总是将一种类型序列化为另一种类型。就我而言,我想始终将 Long 序列化为 String。现在,只要有一个具有 Long 属性的对象,我们就必须用@JsonSerialize(using=ToStringSerializer.class) 对其进行注释。这是乏味且容易忘记的。

我希望能够将 Jackson 对象映射器配置为在 Spring Boot bean 创建中始终将 Long 转换为 String。

【问题讨论】:

    标签: java json spring-boot jackson


    【解决方案1】:

    恕我直言,有多种选择。

    com.fasterxml.jackson.databind.ser.std.StdSerializer 实现,可以在 spring 上下文中设置为您的 ObjectMapper。

        @Bean
        public Jackson2ObjectMapperBuilder objectMapperBuilder() {
            Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
            ....
            builder.serializerByType(<type>, <your custom serializer>);
            return builder;
        }
    

    至于自定义序列化器,可以扩展上述类StdSerializer

    spring.jackson.generator.write-numbers-as-strings=true

    注意

    请注意 Feature.WRITE_NUMBERS_AS_STRINGS 自杰克逊版本 2.10 起已弃用。

    我希望它有所帮助。

    【讨论】:

    • 谢谢!这是一个非常干净的解决方案。对于我的用例,我可以简单地使用杰克逊提供的预制 ToStringSerializer。
    【解决方案2】:

    这可以使用这个序列化功能来完成。

    jsonGenerator.configure(Feature.WRITE_NUMBERS_AS_STRINGS,true);
    

    http://fasterxml.github.io/jackson-core/javadoc/2.10/com/fasterxml/jackson/core/json/JsonWriteFeature.html#WRITE_NUMBERS_AS_STRINGS

    【讨论】:

    • 这会转换包括整数在内的所有数字吗?我只想将 Longs 序列化为字符串。不过,这确实解决了问题。编辑:阅读确认它将所有数字转换为字符串的文档。
    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多