Сериализация картызначения как Shape.STRING - PullRequest
1 голос
/ 28 марта 2019

Я знаю, что можно управлять формой сериализации BigDecimal Джексоном, используя что-то вроде @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 Ответ

3 голосов
/ 28 марта 2019

Кажется, невозможно использовать эту аннотацию для значения карты.

Но в данном конкретном случае вы можете поместить аннотацию на самой карте:

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

...