【发布时间】:2014-02-25 20:28:00
【问题描述】:
我收到以下 JSON 作为来自服务的响应。我正在使用 Spring RestTemplate 调用服务,该服务还将 JSON 反序列化回对象。我正在尝试将其反序列化为一个除了其他字段之外还有一个列表的对象。反序列化时出现以下错误:
Can not instantiate value of type [simple type, class com.org.EmployeeInfo] from String value; no single-String constructor/factory method.
以下是我要反序列化的 JSON:
{
"employees": {
"employeeInfo": [
"{\r\n \"id\": \"123\",\r\n \"group\": \"MARKETING\",\r\n \"role\": \"MANAGER\",\r\n}",
"{\r\n \"id\": \"256\",\r\n \"group\": \"IT\",\r\n \"role\": \"DIRECTOR\",\r\n}",
"{\r\n \"id\": \"789\",\r\n \"group\": \"SALES\",\r\n \"role\": \"CEO\",\r\n}"
]
},
"status": "EMPLOYED",
"somethingElse": {
"something": []
}
}
如果我尝试将响应映射到的对象中有List<EmployeeInfo>,则默认反序列化器会失败,但如果我使用List<String> 或String[],它会起作用。这是因为 JSON 中的双引号(我说的是 "{\r\n) 使其被视为字符串
我打算编写一个自定义反序列化器,将其反序列化为具有 List 的对象,并删除作为响应的一部分的 \r\n。我怎样才能做到这一点?感谢任何回复。
这是我的 POJO:
public class Response {
private Employees employees;
private String status;
private SomethingElse somethingElse;
// getters, setters
}
public class Employees {
List<EmployeeInfo> employeeInfo;
// getters, setters
}
public class EmployeeInfo
{
private String id, group, role;
// getters, setters
}
谢谢
【问题讨论】:
-
你有一个 JSON 对象。这不能反序列化为
List。请澄清您要做什么。你只得到employeeInfo吗? -
我收到了上述 json 作为来自服务的响应。我正在使用 Spring RestTemplate 调用服务,该服务还将 JSON 反序列化回对象。我试图将它反序列化为一个除了其他字段之外还有一个 List
的对象。反序列化时出现以下错误:无法从字符串值实例化类型 [简单类型,类 com.org.EmployeeInfo] 的值;没有单字符串构造函数/工厂方法 -
用我的 POJO 更新了问题