Java JSON和XML不匹配
我正在构建一个restapi,需要返回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
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;
}