我正在使用以下代码将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值反序列化(缺少默认构造函数或创建者,或者是否需要添加/启用类型信息?)),然后将突出显示的代码添加到映射器,然后它开始给出此异常。谁能帮我找出解决该异常的方法?
答案 0 :(得分:0)
我有以下适用于Jackson 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
,所以我真的不知道为什么会这样。