我正在構建一個REST API,需要返回JSON
和XML
。我正在使用Jersey來構建REST API。JSON和XML不匹配
這裏是我的模型類:
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 javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Student {
private int id;
private String name;
private String surname;
public Student(){
}
public Student(int id, String name, String surname) {
this.id = id;
this.name = name;
this.surname = surname;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
-
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Grade {
private String subject;
private String mark;
public Grade(){
}
public Grade(String subject, String mark) {
this.subject = subject;
this.mark = mark;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
}
而這裏的REST終點:
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();
}
}
當我返回JSON
它工作正常。 Grades
作爲合適的JSON array
返回。這裏的結果:
{
"grades": [
{
"mark": "A",
"subject": "Algorithms"
},
{
"mark": "B",
"subject": "OOP"
},
{
"mark": "C",
"subject": "English"
}
],
"student": {
"id": 1,
"name": "John",
"surname": "Doe"
}
}
我怎麼能以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>
我得到的結果是:
<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>
如果我解決XML
,讓我們說我添加一個Grades
對象,其中包含一個List
的Grade
對象,然後我得到一個額外的(不必要的)JSON
對象。
有沒有解決方法呢?
[This](http://stackoverflow.com/questions/24307106/how-to-annotate-a-list-using-xmlelement)可能會有所幫助。希望它不會對JSON的生成產生負面影響。 –
Andrew S,謝謝,但我看到你的評論有點晚了。這正如我解決它。 –