【问题标题】:How to disable Jackson serialization feature WRITE_NUMBERS_AS_STRINGS for certain field?如何为某些字段禁用杰克逊序列化功能 WRITE_NUMBERS_AS_STRINGS?
【发布时间】:2017-10-11 14:13:28
【问题描述】:

我正在使用 Jackson 2.8 序列化 REST 服务响应。为了防止在大多数服务中与 Javascript(将数字存储为 64 位 IEEE 754 浮点值)相关的数字损坏,我想应用以下 JsonGenerator 功能

objectMapper.configure(WRITE_NUMBERS_AS_STRINGS, true);

少数字段的值不易出现 IEEE 754 转换错误。但是,当它们被序列化为字符串时,会导致客户端应用程序出错,重构(在这种情况下)可能很乏味,最好避免。

我尝试过使用 JsonSerialize 注释

@JsonSerialize(as = int.class)      
int status;

但没有成功。似乎 WRITE_NUMBERS_AS_STRINGS 优先于注释。

问题是如何(如果可能)从 WRITE_NUMBERS_AS_STRINGS 功能应用的规则中配置一些排除项?

【问题讨论】:

    标签: java spring rest serialization jackson


    【解决方案1】:

    来自 Jackson 2 批注documentation:

    @JsonRawValue:可用于指定的每个属性标记 属性的值将“完全”包含在序列化中 原样,没有转义或装饰

    看起来@JsonRawValue 适用于您的情况,即使使用WRITE_NUMBERS_AS_STRINGS。


    如果您的 POJO 中有 Map<String, Long> field; 之类的内容,另一种选择是使用自定义序列化程序,因为您无法使用任何默认注释访问映射键/值。

    【讨论】:

    • 感谢@JsonRawValue - 它有帮助。我在发布问题之前尝试了自定义序列化程序类 - 它没有
    猜你喜欢
    • 2012-08-16
    • 2017-02-15
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多