Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpJsDv 145 of 322 menu
◀ ▶

Значение по умолчанию в Java

Не каждый внешний документ содержит полный набор ключей. Если в обычном классе полю задано значение при объявлении, Jackson после создания объекта оставит его, когда ключ в JSON отсутствует.

Настройки интерфейса часто описывают темой и размером шрифта. Для темы можно оставить запасной вариант прямо в поле класса:

import com.fasterxml.jackson.databind.ObjectMapper; public class UiPrefs { private String theme = "light"; private int fontSize; public String getTheme() { return theme; } public void setTheme(String theme) { this.theme = theme; } public int getFontSize() { return fontSize; } public void setFontSize(int fontSize) { this.fontSize = fontSize; } } public class Main { public static void main(String[] args) throws Exception { String raw = "{\"fontSize\":16}"; ObjectMapper mapper = new ObjectMapper(); UiPrefs prefs = mapper.readValue(raw, UiPrefs.class); System.out.println(prefs.getTheme()); System.out.println(prefs.getFontSize()); } }

Ключ theme в тексте отсутствует, поэтому поле остаётся "light". Компонент fontSize берётся из JSON как 16.

При записи поля с default попадают в строку вместе с остальными свойствами. Проверим полный и укороченный объект:

import com.fasterxml.jackson.databind.ObjectMapper; public class UiPrefs { private String theme = "light"; private int fontSize; public String getTheme() { return theme; } public void setTheme(String theme) { this.theme = theme; } public int getFontSize() { return fontSize; } public void setFontSize(int fontSize) { this.fontSize = fontSize; } } public class Main { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); UiPrefs full = new UiPrefs(); full.setTheme("dark"); full.setFontSize(14); UiPrefs shortPrefs = mapper.readValue( "{\"fontSize\":14}", UiPrefs.class ); System.out.println(mapper.writeValueAsString(full)); System.out.println(shortPrefs.getTheme()); } }

У record все компоненты обязательны в конструкторе, поэтому для пропущенных ключей чаще берут класс с полями, как выше, или отдельный урок про record с явной схемой JSON.

Дана строка JSON:

String raw = "{\"priority\":2}";

Сделайте класс AlertConfig с полем channel по умолчанию "email" и обязательным priority типа int с геттерами и сеттерами. Из этой строки получите объект и выведите канал и приоритет.

Создайте AlertConfig только с приоритетом 1 через разбор короткого JSON без ключа канала. Затем задайте канал "sms" и тот же приоритет, запишите оба объекта в текст и выведите обе строки подряд.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить