Я пытался использовать Джексон, чтобы написать значение класса в формате JSON, который имеет Дополнительно в качестве полей:Использование Джексона ObjectMapper с Java 8 факультативных значений
public class Test {
Optional<String> field = Optional.of("hello, world!");
public Optional<String> getField() {
return field;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Test()));
}
}
При выполнении этого класса генерирует следующий вывод:
{"field":{"present":true}}
Я понимаю, что настоящее/не настоящее поле включено и может работать вокруг него при чтении данных JSON, однако я не могу обойти тот факт, что фактическое содержимое необязательного никогда не записывается на выход. :(
Любой обходные здесь кроме не использовать ObjectMapper вообще?
Optionals не предназначены для использования в качестве полей (или свойств этого вещества). Они должны использоваться только как возвращаемые значения. – zeroflagL
@zeroflagL Вы могли бы предоставить любые достоверные источники, описывающие, что такое необязательный вариант? – Jonas
@Jonas [этот ответ] (http://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555) например: _Наше намерение состояло в том, чтобы предоставить ограниченный механизм для библиотеки методы возвращают типы, где должен быть четкий способ представления «никакого результата» _. Также не реализация «Serializable» довольно очевидна. – zeroflagL