0

我正在尝试将对象序列化为 json 并从其反序列化。我尝试使用静态方法创建一个类,该方法在给定类的一般情况下可以完成此任务。

public static <T> T jsonToObject(String json, Class<T> tClass) {
    try {
        return mapper.readValue(json, tClass);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

然后在单元测试中:

@Test
public void testUserDataSerialization() {

    UserData userData = new UserData
        .Builder("david@davidgeorgewilliams.com")
        .firstName("david")
        .lastName("Williams")
        .build();

    String userDataJson = JsonUtils.objectToJson(userData);

    String userDataJson1 = JsonUtils.objectToJson(userData1);

    System.out.println(userDataJson + "\n" + userData1);
} 

这会因为这个例外而爆炸

Running com.company.app.UserDataJsonTest
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.company.app.model.UserData]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: java.io.StringReader@76ba6b2; line: 1, column: 2]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)

我在这里做错了什么,我该如何解决?这个想法是我想从 post 请求正文中接受 JSON,并将其转换为相应的对象。

4

2 回答 2

0

答案如上米哈尔的评论。

于 2013-10-25T15:13:09.880 回答
0

您需要使用TypeReference泛型来处理类型擦除。查看文档(使用泛型的数据绑定部分)。TypeFactory也可以。

于 2013-10-25T02:39:33.400 回答