Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
如何使用JAXB、JAX-RS2.0和MOXy将Java类打包成JSON_Json_Rest_Jaxb_Marshalling_Moxy - Fatal编程技术网

如何使用JAXB、JAX-RS2.0和MOXy将Java类打包成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

我有一个运行在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 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"} 
]