Рубрики
Без рубрики

Джексон – Изменить имя поля

Джексон – Измените имя поля, чтобы оно соответствовало определенному формату JSON.

Автор оригинала: Eugen Paraschiv.

1. Обзор

В этом кратком руководстве показано, как изменить имя поля для сопоставления с другим свойством JsonProperty при сериализации.

Если вы хотите копнуть глубже и узнать другие интересные вещи, которые вы можете сделать с помощью Jackson 2 – перейдите к основному учебнику по Джексону .

2. Измените имя поля для сериализации

Работа с простым объектом:

public class MyDto {
    private String stringValue;

    public MyDto() {
        super();
    }

    public String getStringValue() {
        return stringValue;
    }

    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }
}

Сериализация приведет к следующему JSON:

{"stringValue":"some value"}

Чтобы настроить этот вывод таким образом, чтобы вместо Значение строки мы получаем – например – strVal , нам нужно просто аннотировать геттер:

@JsonProperty("strVal")
public String getStringValue() {
    return stringValue;
}

Теперь, при сериализации, мы получим желаемый результат:

{"strVal":"some value"}

Простой модульный тест должен проверить правильность вывода:

@Test
public void givenNameOfFieldIsChanged_whenSerializing_thenCorrect() 
  throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    MyDtoFieldNameChanged dtoObject = new MyDtoFieldNameChanged();
    dtoObject.setStringValue("a");

    String dtoAsString = mapper.writeValueAsString(dtoObject);

    assertThat(dtoAsString, not(containsString("stringValue")));
    assertThat(dtoAsString, containsString("strVal"));
}

3. Заключение

Маршалинг сущности для соответствия определенному формату JSON является обычной задачей, и в этой статье показано, как это сделать, просто используя аннотацию @JsonProperty .

Реализацию всех этих примеров и фрагментов кода можно найти в моем проекте github .