"com.fasterxml.jackson.databind.JsonMappingException: ожидаемый тип float, integer или string." преобразование java.time.Instant с ObjectMapper
Я сопоставляю связанный HashMap с моим классом Pojo, используя приведенный ниже код.
ObjectMapper mapper = new ObjectMapper();**mapper.registerModule(new ParameterNamesModule()).registerModule(new Jdk8Module()).registerModule(new JavaTimeModule());** mapper.findAndRegisterModules(); mapper.convertValue(wrapper.getObject(), wrapper.getClassType());
Это дает мне следующее исключение "com.fasterxml.jackson.databind.JsonMappingException: ожидаемый тип float, integer или string."
Ранее это давало мне другое исключение (com.fasterxml.jackson.databind.JsonMappingException: невозможно создать экземпляр java.time.Instant: не найдено подходящего конструктора, невозможно десериализовать из значения объекта (отсутствует конструктор или создатель по умолчанию или возможно, нужно добавить / включить информацию о типе?)) и после добавления выделенного кода в маппер он начал выдавать это исключение. Может ли кто-нибудь помочь мне понять, как решить это исключение?
1 ответ
У меня есть следующий тест, который работает для меня на Джексоне 2.8.9.
public class FooTest {
public static class CustomBean implements Serializable {
private static final long serialVersionUID = 1L;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public Instant time;
public String recordName;
public CustomBean() {
}
@Override
public String toString() {
return String.format("name:%s time:%s", recordName, time);
}
}
@Test
public void test_me() throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
Map<String, Object> data = new LinkedHashMap<>();
data.put("recordName", "test");
data.put("time", Instant.now());
String json = mapper.writeValueAsString(data);
System.out.println(json);
CustomBean bean = mapper.convertValue(data, CustomBean.class);
System.out.println(bean);
}
}
Я получаю вывод:
{"recordName":"test","time":1536738977.085000000}
name:test time:2018-09-12T07:56:17.085Z
Сравнивая это с вашим выводом JSON в комментарии, вы чувствуете, что ваш Instant не сериализуется правильно. Даже если вы загружаете JavaTimeModule
так что я не знаю, почему это происходит.