Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java JSON和XML不匹配_Java_Json_Xml_Rest_Jax Rs - Fatal编程技术网

Java JSON和XML不匹配

Java JSON和XML不匹配,java,json,xml,rest,jax-rs,Java,Json,Xml,Rest,Jax Rs,我正在构建一个restapi,需要返回JSON和XML。我正在使用Jersey构建RESTAPI 以下是我的模型课程: import java.util.List; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Certificate { private Student student; private List<Grade> grades; p

我正在构建一个restapi,需要返回
JSON
XML
。我正在使用Jersey构建RESTAPI

以下是我的模型课程:

import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Certificate {
    private Student student;
    private List<Grade> grades;

    public Certificate() {

    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public List<Grade> getGrades() {
        return grades;
    }

    public void setGrades(List<Grade> grades) {
        this.grades = grades;
    }
}
-

以下是其余的结束点:

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.hoxha.test.test.Certificate;
import org.hoxha.test.test.Grade;
import org.hoxha.test.test.Student;

@Path("certs")
public class CertificateResource {

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getCertJson() {
    Certificate cert = getCertificate();
    return Response.ok(cert, MediaType.APPLICATION_JSON).build();
}

private Certificate getCertificate() {
    Certificate cert = new Certificate();
    Student student = new Student(1, "John", "Doe");
    cert.setStudent(student);
    List<Grade> grades = new ArrayList<>();
    grades.add(new Grade("Algorithms", "A"));
    grades.add(new Grade("OOP", "B"));
    grades.add(new Grade("English", "C"));
    cert.setGrades(grades);
    return cert;
}

@GET
@Produces(MediaType.APPLICATION_XML)
public Response getCertXml() {
    Certificate cert = getCertificate();
    return Response.ok(cert, MediaType.APPLICATION_XML).build();
}

}
如何以XML格式获得此结果:

<certificate>
  <grades>     
    <grade>
        <mark>A</mark>
        <subject>Algorithms</subject>
    </grade>
    <grade>
        <mark>B</mark>
        <subject>OOP</subject>
    </grade>
    <grade>
        <mark>C</mark>
        <subject>English</subject>
    </grade>
  </grades>
  <student>
      <id>1</id>
      <name>John</name>
      <surname>Doe</surname>
  </student>
</certificate>

A.
算法
B
哎呀
C
英语
1.
约翰
雌鹿
我得到的结果是:

<certificate>
<grades>
    <mark>A</mark>
    <subject>Algorithms</subject>
</grades>
<grades>
    <mark>B</mark>
    <subject>OOP</subject>
</grades>
<grades>
    <mark>C</mark>
    <subject>English</subject>
</grades>
<student>
    <id>1</id>
    <name>John</name>
    <surname>Doe</surname>
</student>
</certificate>

A.
算法
B
哎呀
C
英语
1.
约翰
雌鹿
如果我修复了
XML
,假设我添加了一个
Grades
对象,其中包含
Grade
对象的
列表,那么我会得到一个额外的(不必要的)
JSON
对象


有这样的解决方案吗?

对您的证书类使用
@xmlementwrapper(name=“grades”)

@XmlRootElement
public class Certificate {
private Student student;
@XmlElementWrapper(name = "grades")
private List<Grade> grade;
@XmlRootElement
公开课证书{
私立学生;
@XmlElementWrapper(name=“grades”)
私人名单职系;

@xmlementwrapper(name=“grades”)
用于您的证书类

@XmlRootElement
public class Certificate {
private Student student;
@XmlElementWrapper(name = "grades")
private List<Grade> grade;
@XmlRootElement
公开课证书{
私立学生;
@XmlElementWrapper(name=“grades”)
私人名单职系;

@NullPointerException,非常感谢!你给了我一个很好的提示

我通过将
@xmlementwrapper(name=“grades”)
@xmlement(name=“grade”)
添加到
getGrades()方法中解决了这个问题

@XmlElementWrapper(name = "grades")
@XmlElement(name = "grade")
public List<Grade> getGrades() {
    return grades;
}
@xmlementwrapper(name=“grades”)
@xmlement(name=“grade”)
公开名单{
返回等级;
}

@NullPointerException,非常感谢!你给了我一个很好的提示

我通过将
@xmlementwrapper(name=“grades”)
@xmlement(name=“grade”)
添加到
getGrades()方法中解决了这个问题

@XmlElementWrapper(name = "grades")
@XmlElement(name = "grade")
public List<Grade> getGrades() {
    return grades;
}
@xmlementwrapper(name=“grades”)
@xmlement(name=“grade”)
公开名单{
返回等级;
}

可能会有帮助。希望它不会对JSON的生成产生负面影响。Andrew S,谢谢,但我看到你的评论有点晚。这正是我解决它的方式。可能会有帮助。希望它不会对JSON的生成产生负面影响。Andrew S,谢谢,但我看到你的评论有点晚。这正是我解决它的方式。不起作用。这这就是我现在得到的:三个数组,第一个数组有所有的等级,而另一个数组每个(A,B,C)只有一个。不能在这里发布结果。对不起,我得到四个数组。第一个数组有所有等级作为…元素,另外三个数组有一个元素(每个:A,B,C).不起作用。这就是我现在得到的:三个数组,第一个数组有所有的等级,另一个数组每个只有一个(A,B,C)。不能在这里发布结果。抱歉,我得到了四个数组。第一个数组的所有等级都是…元素,另外三个数组有一个元素(一个为每个元素:A,B,C)。
@XmlElementWrapper(name = "grades")
@XmlElement(name = "grade")
public List<Grade> getGrades() {
    return grades;
}