Jackson Json对象映射器:如何映射数组?
作者:互联网
我正在尝试从后端api调用映射数组.我该如何知道这些数据:
以下类将用于保存json数组数据:
@Data
private static class UserListBean {
private List<UserBean> userList;
}
@Data
private static class UserBean {
private String id;
private String userName;
private String password;
}
json将具有以下格式(以下示例仅包含一项):
[
{
"id":1,
"userName":"bob",
"password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
}
]
我正在使用杰克逊,到目前为止,我已经尝试了以下方法,但是它一直让我发回异常
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final ObjectReader reader = mapper.reader(UserListBean.class);
GeoHubAccountListBean accounts = null;
try {
accounts = reader.readValue(jsonString);
} catch (final IOException ex) {
log.error("Cannot convert JSON into a list of users", ex);
}
在这里,最终的ObjectReader reader = mapper.reader(UserListBean.class);引发异常
Can not deserialize instance of com.xxx.XXX$UserListBean out of START_ARRAY token
任何想法 ?
谢谢
解决方法:
好吧,如果您尝试将JSON反序列化为UserListBean类型的对象,则需要反序列化JSONObject(Java对象倾向于映射到JSONObjects).
因此,您最外层的json构造应该是一个对象.您最外层的json构造是一个JSONArray.
您的UserListBean具有单个字段,即List< UserBean>.因此,您的顶级json构造(即JSONObject)应包含一个名称为“ userList”的字段,其值是JSONArray(Java集合倾向于映射到JSONArrays).
我认为这是您正在寻找的实际json:
{
"userList":[
{
"id":1,
"userName":"bob",
"password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
}
]
}
如果您无法控制传入的json,则您可能希望放弃父对象UserListBean并直接处理List< UserBean> ;,因为它将与您提供的json一起使用.
标签:datamapper,rest,jackson,spring,json 来源: https://codeday.me/bug/20191123/2064086.html