将 json 的字符串转换为列表
Convert String with json to List
我正在尝试将 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;
}
但是我得到了异常:
Cannot deserialize instance of java.util.LinkedHashMap
所以我尝试了不同的方式:
A[] map = mapper.readValue(jSONString, A[].class);
我得到了:
InvalidDefinitionException: Cannot construct instance of
com.model.A
(no Creators, like default
construct, exist):
更新:
我尝试将 Service.class 更改为:
List<A> map = mapper.readValue(jSONString, new TypeReference<List<A>>(){});
仍然出现异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot
construct instance of com.model.A
(no Creators,
like default construct, exist):
所以我删除了@AllArgsConstructor注解,手动添加了Constructor:
public A(String paramName, String paramValue) {}
还有个例外:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot
construct instance of com.model.A
(no Creators,
like default construct, exist):
我认为问题写在错误中:尝试在必须反序列化的 class 上定义一个空构造函数。
我还认为要序列化 class(因此,换句话说,从字节到 class)你必须实现可序列化接口。
我正在尝试将 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;
}
但是我得到了异常:
Cannot deserialize instance of
java.util.LinkedHashMap
所以我尝试了不同的方式:
A[] map = mapper.readValue(jSONString, A[].class);
我得到了:
InvalidDefinitionException: Cannot construct instance of
com.model.A
(no Creators, like default construct, exist):
更新:
我尝试将 Service.class 更改为:
List<A> map = mapper.readValue(jSONString, new TypeReference<List<A>>(){});
仍然出现异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of
com.model.A
(no Creators, like default construct, exist):
所以我删除了@AllArgsConstructor注解,手动添加了Constructor:
public A(String paramName, String paramValue) {}
还有个例外:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of
com.model.A
(no Creators, like default construct, exist):
我认为问题写在错误中:尝试在必须反序列化的 class 上定义一个空构造函数。 我还认为要序列化 class(因此,换句话说,从字节到 class)你必须实现可序列化接口。