Есть ли способ, такой как @JsonFilter, чтобы печатать только значения HashMap? - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу, чтобы мои карты печатали значения только при сериализации в JSON. Нечто похожее на этот фильтр, который используется для форматирования Даты

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MM/dd/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
LocalDate startDate;

1 Ответ

1 голос
/ 06 февраля 2020

Предполагая, что у вас есть объект с картой в качестве поля, и вы хотите сериализовать этот объект, но вместо пар ключ-значение для свойства карты вы хотите вместо этого только печатать значения в списке, вы может иметь собственный геттер для этого преобразования:

public class MyTest {

    private Map<String, Object> myMapProperty = new HashMap<>();

    @JsonIgnore
    public Map<String, Object> getMyMapProperty() {
        return myMapProperty;
    }

    public void setMyMapProperty(final Map<String, Object> myMapProperty) {
        this.myMapProperty = myMapProperty;
    }

    @JsonProperty("myMapProperty")
    public List<Object> getMyMapPropertyValues() {
        return myMapProperty.values()
                .stream() // use .map to transform values, e.g. flatten if values are Lists themselves
                .collect(Collectors.toList());
    }

    @Test
    public void test() throws JsonProcessingException {
        final MyTest myObject = new MyTest();
        myObject.getMyMapProperty().put("k1", "value1");
        myObject.getMyMapProperty().put("k2", "value2");

        final String value = new ObjectMapper().writeValueAsString(myObject);
        System.out.println(value);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...