我有一个在Tomcat 7上运行的Web应用程序,它使用Jersey 1.8提供一个REST服务,根据下面显示的类文件生成一个JSON文件。
@XmlRootElement
public class Person {
public String firstname;
public String lastname;
public String email;
public Person() {
}
public Person(String firstname, String lastname, String email) {
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
}
}
我使用下面显示的服务生成JSON文件。
@GET
@Path("allpersons")
@Produces(MediaType.APPLICATION_JSON)
public Collection<Person> getAllPersons() {
Person p1 = new Person("Albert","Marks","albert.marks@email.com");
Person p2 = new Person("David","Spencer","david.spencer@email.com");
Collection<Person> all = new ArrayList<>();
all.add(p1);
all.add(p2);
return all;
}
这将导致具有以下形式的JSON文件:
{ "person": [
{ "firstname":"Albert",
"lastname":"Marks",
"email":"albert.marks@email.com"},
{ "firstname":"David",
"lastname":"Spencer",
"david.spencer@email.com"}
]
}
这一切都很好,但后来我不得不更新到Jersey 2.10。既然他们我也使用jersey-media-moxy 2.10。但是,现在生成的JSON如下所示,它打破了调用服务的JavaScript库:
[
{ "firstname":"Albert",
"lastname":"Marks",
"email":"albert.marks@email.com"},
{ "firstname":"David",
"lastname":"Spencer",
"david.spencer@email.com"}
]
我比较了使用两个版本的Jersey生成的XML文件,它们完全相同。因此我想它一定是MOXy的一些配置问题。我尝试提供一个继承javax.ws.rs.core.Application的自己的类,但效果仍然相同。知道原因是什么吗?
答案 0 :(得分:0)
MOXy的JSON绑定将Java java.util.Collection
呈现为JSON数组(make的意义正确吗?)。如果您希望它包含根级person
键,那么您可以返回具有Collection<Person>
属性Collection
或带注释的类的实例,而不是返回person
。 @XmlElement(name="person")
。