Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将json数组映射到java类_Java_Spring Boot - Fatal编程技术网

如何将json数组映射到java类

如何将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

我正在尝试将请求主体从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":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}]