【问题标题】:Jackson - Serialize boolean to 1/0 instead of true/falseJackson - 将布尔值序列化为 1/0 而不是 true/false
【发布时间】:2014-11-09 10:46:30
【问题描述】:

我有接收 JSON 对象的 REST 资源,该对象是从用户 ID 到指示该用户是否有错误的某个布尔值的映射。

由于我预计会有大量用户,因此我想通过使用 1/0 而不是 true/false 来缩小此 JSON 的大小。

我试过了,发现在海水淡化过程中,Jackson 会成功地将 1/0 转换为 true/false,但是有没有办法告诉 Jackson(可能使用注释?)将此布尔字段序列化为 1/0 而不是 true/false ?

【问题讨论】:

标签: java json jackson


【解决方案1】:

从 jackson-databind 2.9 开始,@JsonFormat 支持数字 (0/1) 布尔序列化(但不支持反序列化):

@JsonFormat(shape = JsonFormat.Shape.NUMBER)
abstract boolean isActive();

请参阅引用此 SO 帖子的 https://github.com/fasterxml/jackson-databind/issues/1480

【讨论】:

  • @danieln:我建议将此标记为正确答案。
【解决方案2】:

这是一个 Jackson JsonSerializer,它将布尔值序列化为 10

public class NumericBooleanSerializer extends JsonSerializer<Boolean> {
    @Override
    public void serialize(Boolean b, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeNumber(b ? 1 : 0);
    }
}

然后像这样注释布尔字段:

@JsonSerialize(using = NumericBooleanSerializer.class)
private boolean fieldName;

或者在杰克逊Module注册:

module.addSerializer(new NumericBooleanSerializer());

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2013-10-11
  • 2012-09-12
  • 2019-05-16
  • 1970-01-01
相关资源
最近更新 更多