【发布时间】:2020-06-05 15:22:16
【问题描述】:
我正在尝试将 JSON 字符串(必须是列表)转换为对象列表:
[
{
"paramName":"Content-Type",
"paramValue":"text/xml; charset\u003d\"utf-8\""
}
]
这是我的 Service.class:
String jSONString = new Gson().toJson(systemParams);
ObjectMapper mapper = new ObjectMapper();
List<A> map = (List<A>) mapper.readValue(jSONString, A.class);
这是我的模型:
@Data
@AllArgsConstructor
public class A {
String paramName;
String paramValue;
}
但是我得到了异常:
无法反序列化
java.util.LinkedHashMap的实例
所以我尝试了不同的方式:
A[] map = mapper.readValue(jSONString, A[].class);
我得到了:
InvalidDefinitionException:无法构造实例
com.model.A(没有创作者,默认 构造,存在):
更新:
我尝试将 Service.class 更改为:
List<A> map = mapper.readValue(jSONString, new TypeReference<List<A>>(){});
还是有异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造
com.model.A的实例(无创作者, 像默认构造,存在):
于是我删除了@AllArgsConstructor注解,手动添加了Constructor:
public A(String paramName, String paramValue) {}
还有一个例外:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造
com.model.A的实例(没有创作者, 像默认构造,存在):
【问题讨论】:
-
@wowo 不,现在我有: InvalidDefinitionException: 无法构造
com.model.A的实例(没有创建者,如默认构造,不存在)但我在 A.class 中使用 @Data 和 @AllArgsConstructor 注释跨度>
标签: java json objectmapper