Перейти к основному содержимому

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

· 2 мин. чтения

1. Обзор

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

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

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"}

Чтобы настроить этот вывод так, чтобы вместо stringValue мы получали, например , 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 .