将 Map<String, BigDecimal> 值序列化为 Shape.STRING

Serialize Map<String, BigDecimal> values as Shape.STRING

我知道可以通过使用 @JsonFormat(shape = Shape.STRING).

之类的东西来控制 Jackson 序列化的 BigDecimal 的形状

我想不通的是如何在 Map 值的 BigDecimal 上启用它,而不必全局配置 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"
}

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

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

@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+)