鉴于Person.java:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String lastName;
private String firstName;
private String middleName;
// ...
public String getLastName() {
return lastName;
}
public String getFirstName() {
return firstName;
}
public String getMiddleName() {
return middleName;
}
}
和Persons.java:
public class Persons implements Serializable {
private static final long serialVersionUID = 1L;
private final List<Person> persons;
public Persons(List<Person> persons) {
this.persons = persons;
}
public List<Person> getPersons() {
return persons;
}
}
为Persons返回JSON响应时,会重复“persons”元素:
{
"persons" : {
"persons" : [ {
"lastName" : "McCartney",
"firstName" : "James",
"middleName" : "Paul"
}, {
"lastName" : "Lennon",
"firstName" : "John",
"middleName" : "Winston"
}, {
"lastName" : "Starkey",
"firstName" : "Richard",
"middleName" : null
}, {
"lastName" : "Harrison",
"firstName" : "George",
"middleName" : null
} ]
}
}
如何删除额外元素?
答案 0 :(得分:1)
原因可能是因为您有一个名为persons
的模型属性,您要为MappingJackson2JsonView
返回以转换为json:
model.addAttribute("persons", personsType);
我能想到两个很好的修复:
要使用@ResponseBody
带注释的控制器方法,这样您就可以返回人员,而MappingJackson2HttpMessageConverter
会将您的类型干净地转换为json
如果您想继续使用您的方法,可以使用附加标志自定义MappingJackson2JsonView
,以指示在序列化为json之前必须从模型中提取值 - 请参阅here < / p>