2

我正在使用以下代码将linkedHashMap 映射到我的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:预期类型浮点、整数或字符串”。

以前,它给了我一个不同的异常(com.fasterxml.jackson.databind.JsonMappingException:无法构造 java.time.Instant 的实例:找不到合适的构造函数,无法从 Object 值反序列化(缺少默认构造函数或创建者,或也许需要添加/启用类型信息?))并且在将突出显示的代码添加到映射器之后,它开始给出这个异常。谁能帮我弄清楚如何解决这个异常?

4

1 回答 1

0

我有以下测试适用于杰克逊 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所以我真的不知道为什么会这样。

于 2018-09-12T08:01:33.293 回答