如何使用JAXB、JAX-RS2.0和MOXy将Java类打包成JSON
我有一个运行在Tomcat7上的web应用程序,它使用Jersey 1.8提供一个REST服务,根据下面显示的类文件生成JSON文件如何使用JAXB、JAX-RS2.0和MOXy将Java类打包成JSON,json,rest,jaxb,marshalling,moxy,Json,Rest,Jaxb,Marshalling,Moxy,我有一个运行在Tomcat7上的web应用程序,它使用Jersey 1.8提供一个REST服务,根据下面显示的类文件生成JSON文件 @XmlRootElement public class Person { public String firstname; public String lastname; public String email; public Person() { } public Person(String firstna
@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;
}
这一切都很好,但后来我不得不更新到泽西2.10。因为他们,我也使用泽西媒体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的类,但效果仍然相同。知道原因是什么吗?MOXy的JSON绑定将Java Java.util.Collection呈现为JSON数组,这很有意义吧?。如果希望它包含根级别的person键,则可以返回一个类的实例,该类具有名为person的集合属性,或带有@XmlElementname=person注释。谢谢,这解决了我的问题。你是对的,MOXy的JSON绑定行为是有意义的-
[
{ "firstname":"Albert",
"lastname":"Marks",
"email":"albert.marks@email.com"},
{ "firstname":"David",
"lastname":"Spencer",
"david.spencer@email.com"}
]