如何将json数组映射到java类
我正在尝试将请求主体从postman映射到spring boot实体如何将json数组映射到java类,java,spring-boot,Java,Spring Boot,我正在尝试将请求主体从postman映射到spring boot实体 { "college":"0", "collegeName":"", "email":"a.r@g.com", "firstName":"Mike", "gradEndYear":"2017", "gradStartYear":"2014", "lastName":"worrell", "marks":[ {"sem1":60}, {"sem2":70}, {"sem3":80}, {"sem4
{
"college":"0",
"collegeName":"",
"email":"a.r@g.com",
"firstName":"Mike",
"gradEndYear":"2017",
"gradStartYear":"2014",
"lastName":"worrell",
"marks":[
{"sem1":60},
{"sem2":70},
{"sem3":80},
{"sem4":60},
{"sem5":60},
{"sem6":60},
{"sem7":70},
{"sem8":60}
]
}
问题是我试图将marks数组映射到map,但出现以下错误
消息“:”JSON解析错误:无法反序列化的实例
java.util.LinkedHashMap out of START_数组令牌;嵌套异常是
com.fasterxml.jackson.databind.JsonMappingException:无法
从START\u数组反序列化java.util.LinkedHashMap的实例
令牌\n位于[源代码:java.io]。PushbackInputStream@2b05836e;第9行,
列:9](通过引用链:
icms.external.springboot.candidateRegistration.model.CandidateRegistrationForm[\“marks\”]))
Java模型
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class CandidateRegistrationForm
{
private String firstName;
private String middleName;
private String lastName;
private String email;
private String college;
private String collegeName;
private String gradStartYear;
private String gradEndYear;
private Map<String, Integer> marks = new HashMap<>();
//getters and setters
}
@组件
@范围(BeanDefinition.Scope\u原型)
公开课候选人登记表
{
私有字符串名;
私有字符串名称;
私有字符串lastName;
私人字符串电子邮件;
私立弦乐学院;
私有字符串集合名;
私有字符串gradStartYear;
私人字符串年级第二年;
私有映射标记=新的HashMap();
//接球手和接球手
}
或者更改json,以便将其映射到java映射数据结构,在这种情况下,json将如下所示
“标记”:
{
“sem1”:60,
“sem2”:70,
}
或者使用arraylist而不是map。或者更改json,以便将其映射到java map数据结构,在这种情况下,json如下所示
“标记”:
{
“sem1”:60,
“sem2”:70,
}
或者使用arraylist而不是map。
map
由JSON对象表示,而不是数组。因此,您应该更改json:
{
"college":"0",
"collegeName":"",
"email":"a.r@g.com",
"firstName":"Mike",
"gradEndYear":"2017",
"gradStartYear":"2014",
"lastName":"worrell",
"marks":[
{"sem1":60},
{"sem2":70},
{"sem3":80},
{"sem4":60},
{"sem5":60},
{"sem6":60},
{"sem7":70},
{"sem8":60}
]
}
进入
这就是Map
在JSON中的表示方式。如果要保留此JSON,请将类更改为:
private String firstName;
private String middleName;
private String lastName;
private String email;
private String college;
private String collegeName;
private String gradStartYear;
private String gradEndYear;
private List<Map<String, Integer>> marks = new ArrayList<Map<String, Integer>>();
私有字符串名;
私有字符串名称;
私有字符串lastName;
私人字符串电子邮件;
私立弦乐学院;
私有字符串集合名;
私有字符串gradStartYear;
私人字符串年级第二年;
私有列表标记=新的ArrayList();
然后,您可以轻松地将其平面化:
Map<String, Integer> map = list.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue));
Map Map=list.stream()
.flatMap(m->m.entrySet().stream())
.collect(collector.toMap)(
Map.Entry::getKey,
Map.Entry::getValue));
Map
由JSON对象表示,而不是数组。因此,您应该更改json:
{
"college":"0",
"collegeName":"",
"email":"a.r@g.com",
"firstName":"Mike",
"gradEndYear":"2017",
"gradStartYear":"2014",
"lastName":"worrell",
"marks":[
{"sem1":60},
{"sem2":70},
{"sem3":80},
{"sem4":60},
{"sem5":60},
{"sem6":60},
{"sem7":70},
{"sem8":60}
]
}
进入
这就是Map
在JSON中的表示方式。如果要保留此JSON,请将类更改为:
private String firstName;
private String middleName;
private String lastName;
private String email;
private String college;
private String collegeName;
private String gradStartYear;
private String gradEndYear;
private List<Map<String, Integer>> marks = new ArrayList<Map<String, Integer>>();
私有字符串名;
私有字符串名称;
私有字符串lastName;
私人字符串电子邮件;
私立弦乐学院;
私有字符串集合名;
私有字符串gradStartYear;
私人字符串年级第二年;
私有列表标记=新的ArrayList();
然后,您可以轻松地将其平面化:
Map<String, Integer> map = list.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue));
Map Map=list.stream()
.flatMap(m->m.entrySet().stream())
.collect(collector.toMap)(
Map.Entry::getKey,
Map.Entry::getValue));
@组件
@范围(BeanDefinition.Scope\u原型)
公开课候选人登记表
{
私有字符串名;
私有字符串名称;
私有字符串lastName;
私人字符串电子邮件;
私立弦乐学院;
私有字符串集合名;
私有字符串gradStartYear;
私人字符串年级第二年;
私有列表标记=新的ArrayList();
//接球手和接球手
}
标记应该是json对象的列表,我的意思是map
可以看作{“sem1”:60}
,list
将是[{“sem1”:60}]
@组件
@范围(BeanDefinition.Scope\u原型)
公开课候选人登记表
{
私有字符串名;
私有字符串名称;
私有字符串lastName;
私人字符串电子邮件;
私立弦乐学院;
私有字符串集合名;
私有字符串gradStartYear;
私人字符串年级第二年;
私有列表标记=新的ArrayList();
//接球手和接球手
}
标记应该是json对象的列表,我的意思是map
可以看作{“sem1”:60}
,list
将是[{“sem1”:60}]