Я хочу использовать тип Optional в моих классах, но каждый раз, когда Джексон пытается десериализовать входящий JSON в классы java, я получаю сообщение об ошибке
java.lang.NoSuchFieldError: _valueInstantiator
at com.fasterxml.jackson.datatype.jdk8.OptionalDeserializer.withResolved(OptionalDeserializer.java:38) ~[jackson-datatype-jdk8-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.datatype.jdk8.OptionalDeserializer.withResolved(OptionalDeserializer.java:10) ~[jackson-datatype-jdk8-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer.createContextual(ReferenceTypeDeserializer.java:74) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(DeserializationContext.java:650) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:490) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:293) ~[jackson-databind-2.8.10.jar:2.8.10]
Я знаю, что уже есть ветка об этом: десериализация Джексона Необязательные броски NoSuchFieldError и
Я уже пытался изменить расширение jackson-java8
на более старый тип, но ничего не работает. Я продолжаю получать noSuchFieldError
или просто исключение пустого указателя, когда я использую версию от 2014 года. Может кто-нибудь сказать мне, если есть что-то еще, что я мог бы попробовать? Потому что я действительно хочу использовать Optionals, спасибо. Вот код класса Java. Первое поле вызывает ошибку:
public class SeedRecordQuery {
private Optional<List<Double>> monthlyTemperatureCurve;
private Optional<FilterWrapper> filterWrapper;
public Optional<List<Double>> getMonthlyTemperatureCurve() {
return monthlyTemperatureCurve;
}
public void setMonthlyTemperatureCurve(Optional<List<Double>> monthlyTemperatureCurve) {
this.monthlyTemperatureCurve = monthlyTemperatureCurve;
}
public Optional<FilterWrapper> getFilterWrapper() {
return filterWrapper;
}
public void setFilterWrapper(Optional<FilterWrapper> filterWrapper) {
this.filterWrapper = filterWrapper;
}
}
Я пытался использовать нетипизированный Optional
, но возникает та же ошибка, поэтому ошибка не вызвана универсальным типом List<Double>
РЕДАКТИРОВАТЬ: я сделал обходной путь, который позволяет мне получить значения JSON в качестве дополнительных, но это не идеально:
private List<Double> monthlyTemperatureCurve;
private FilterWrapper filterWrapper;
@JsonIgnore
private Optional<List<Double>> monthlyTemperatureCurveOptional;
@JsonIgnore
private Optional<FilterWrapper> filterWrapperOptional;
public SeedRecordQuery() {
monthlyTemperatureCurveOptional = Optional.ofNullable(monthlyTemperatureCurve);
filterWrapperOptional = Optional.ofNullable(filterWrapper);
}