我知道可以通过使用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"
}
答案 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 +)