"com.fasterxml.jackson.databind.JsonMappingException: ожидаемый тип float, integer или string." преобразование java.time.Instant с помощью ObjectMapper - PullRequest
0 голосов
/ 11 сентября 2018

Я сопоставляю relatedHashMap с моим Custom 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 Ответ

0 голосов
/ 12 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...