将 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+)
我知道可以通过使用 @JsonFormat(shape = Shape.STRING)
.
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+)