У меня есть класс, и я бы предпочел иметь значения Optional<T>
, такие как Optional<Integer> value;
.
В этом проекте Springboot
используется для создания веб-контроллеров, а клиенты отправляют / получают через json
.
Когда клиент помещает или публикует сообщения, а класс синтаксического анализа в java
имеет параметры типа Optional<T>
, происходит сбой; в остальном работает нормально. Тем не мение; Optional<T>
предпочтительнее, потому что мы хотим дать клиенту возможность пропустить поля, если они не используются.
Например:
Это работает:
public class TestClass {
private final int testValue;
public TestClass(@JsonProperty("testValue") int testValue) {
this.testValue = testValue;
}
public int getTestValue() {
return testValue;
}
}
Это не:
public class TestClass {
private final Optional<Integer> testValue;
public TestClass(@JsonProperty("testValue") Optional<Integer> testValue) {
this.testValue = testValue;
}
public Optional<Integer> getTestValue() {
return testValue;
}
}
Вот несколько строк версии от Gradle.
springBootVersion = '1.5.8.RELEASE'
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: '2.6.4'
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8', version: '2.6.3'
При POSTing с почтальоном и значением int
все работает. Когда я использую Optional<Integer>
, я получаю следующий ответ об ошибке от веб-вызова.
Обобщенная:
"исключение":
"Org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Ошибка синтаксического анализа JSON: 0; вложенное исключение
com.fasterxml.jackson.databind.JsonMappingException: 0 (через
ссылочная цепочка:
… (Мой путь к классу)… [\ "actions \"] -> java.util.ArrayList [3]) ",