【发布时间】:2013-01-04 21:55:34
【问题描述】:
使用ObjectMapper 反序列化对象时出现以下错误:
JSONMappingException 无法构造实例 org.springframework.data.Page,问题:抽象类型只能是 用额外的类型信息实例化。
我正在尝试将 JSON 字符串序列化为 Spring 数据对象 org.springframework.data.Page,它表示 T 类型的页面。
User 类是一个简单的 POJO,具有 first 和 last 名称。我反序列化的 JSON 字符串是:
{
"content": [
{
"firstname": "John",
"lastname": "Doe"
},
{
"firstname": "Jane",
"lastname": "Doe"
}
],
"size": 2,
"number": 0,
"sort": [
{
"direction": "DESC",
"property": "timestamp",
"ascending": false
}
],
"totalPages": 150,
"numberOfElements": 100,
"totalElements": 15000,
"firstPage": true,
"lastPage": false
}
这会导致异常:
Page<User> userPage = (Page<User>) new ObjectMapper().mapToJavaObject(json, new TypeReference<Page<User>>(){};
由于Page 是一个 Spring 对象,我无法修改它,我认为这与我在其他地方看到的这个问题的方式有点不同。有什么想法吗?
【问题讨论】:
-
我用我提出的原始答案尝试了反序列化。但是 Page 实现具有无法从输入 JSON 反序列化的虚拟属性,并且会导致进程失败。最好的办法是编写一个自定义 bean 以将 JSON 反序列化为,然后使用来自该自定义 bean 的值实例化一个 PageImpl。