Имя поля в Java
Внешний API часто задаёт имена полей в snake_case, а в Java свойства пишут в camelCase. Без пометки ключ в JSON совпадает с именем поля или компонента, и чужой текст не разберётся.
Аннотацию @JsonProperty вешают на компонент
record или на поле класса и указывают строку, которую
нужно читать и писать вместо имени в коде:
import com.fasterxml.jackson.annotation.JsonProperty;
public record RemoteProfile(
@JsonProperty("full_name") String fullName,
@JsonProperty("age_years") int ageYears
) {}
При записи в текст ключи будут "full_name"
и "age_years", а в коде по-прежнему
используют fullName и ageYears:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public record RemoteProfile(
@JsonProperty("full_name") String fullName,
@JsonProperty("age_years") int ageYears
) {}
public class Main {
public static void main(String[] args) throws Exception {
String raw = "{\"full_name\":\"Ann\",\"age_years\":30}";
ObjectMapper mapper = new ObjectMapper();
RemoteProfile profile = mapper.readValue(raw, RemoteProfile.class);
System.out.println(profile.fullName());
System.out.println(mapper.writeValueAsString(profile));
}
}
Разбор принимает ключи из аннотаций. Обратная запись снова отдаёт тот же формат, который ждёт сервер или файл конфигурации.
Дана строка JSON:
String raw = "{\"device_id\":\"s1\",\"temp_c\":21.5}";
Сделайте record SensorRow: компонент
deviceId в JSON должен называться
"device_id", readingC -
"temp_c". Разберите эту строку
и выведите оба поля.
Создайте SensorRow с идентификатором
"s9" и температурой 18.0,
запишите объект в текст и убедитесь, что в строке
есть ключи "device_id" и "temp_c"
без camelCase-имён компонентов.