将Map <string,bigdecimal =“”>值序列化为Shape.STRING

时间:2019-03-28 12:58:16

标签: java jackson jackson-databind

我知道可以通过使用BigDecimal之类的东西来控制由Jackson序列化的@JsonFormat(shape = Shape.STRING)的形状。

我不知道如何在BigDecimal值的Map上启用它,而不必全局配置ObjectMapper

mapper.configOverride(BigDecimal.class)
        .setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING));

我正在寻找某种东西,我想一个注解或两个注解,以确保无论ObjectMapper的配置如何,该属性始终被序列化为字符串。

// what @Json... annotations here
private Map<String, BigDecimal> foo = ImmutableMap.of(
    "USD", new BigDecimal("1.50"),
    "GBP", new BigDecimal("6.66")
);

// will produce this
{
    "USD": "1.50",
    "GBP": "6.66"
}

1 个答案:

答案 0 :(得分:3)

似乎无法将该注释用于地图值。

但是在这种特殊情况下,您可以将注释放在地图上:

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Map<String, BigDecimal> foo = ImmutableMap.of(
    "USD", new BigDecimal("1.50"),
    "GBP", new BigDecimal("6.66")
);

它将产生您期望的结果。

(杰克逊2.9.5 +)