Сопоставление логического значения с перечислением с помощью ДжексонаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сопоставление логического значения с перечислением с помощью Джексона

Сообщение Anonymous »

Мне нужно десериализовать логическое поле YAML в перечисление и наоборот. У них также разные имена.
Важно, что для поля 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


Java 8.


Подробнее здесь: https://stackoverflow.com/questions/798 ... th-jackson
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»