Важно, что для поля Java в YAML должен быть только один ключ (
Код: Выделить всё
"darkTheme"Перечисление не должно объявлять логическое поле.
Поле YAML должно сохранять свой логический тип для обратной совместимости.
MRE:
Код: Выделить всё
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class YamlTest {
@Test
void testSomething() throws JsonProcessingException {
String yaml = "darkTheme: true";
YAMLFactory factory = new YAMLFactory();
ObjectMapper mapper = new ObjectMapper(factory);
AppSettings settings = mapper.readValue(yaml, AppSettings.class);
assertEquals(AppStyle.DARK, settings.getStyle());
String serializedSettings = mapper.writeValueAsString(settings);
String expectedYaml = "---\n" +
"darkTheme: true\n";
assertEquals(expectedYaml, serializedSettings); // fails
}
}
Код: Выделить всё
import com.fasterxml.jackson.annotation.JsonProperty;
public class AppSettings {
@JsonProperty("darkTheme")
private AppStyle style;
public void setStyle(AppStyle style) {
this.style = style;
}
public AppStyle getStyle() {
return style;
}
}
Код: Выделить всё
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
public enum AppStyle {
BASE, DARK;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AppStyle dark(boolean isDark) {
return isDark ? DARK : BASE;
}
@JsonValue
public static boolean isDark(AppStyle style) {
return style == DARK;
}
}
Код: Выделить всё
com.fasterxml.jackson.core
jackson-databind
2.15.1
com.fasterxml.jackson.core
jackson-annotations
2.15.1
com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
2.15.1
Подробнее здесь: https://stackoverflow.com/questions/798 ... th-jackson
Мобильная версия