泽西岛 JSON 响应中缺少父标签
Missing Parent Tag in JSON Response in Jersey
我是 运行 我在 Jetty.When 中的 REST 服务(泽西岛) 我在 Response 中使用 XML 媒体类型调用 REST 方法它工作正常但是当媒体类型是 JSON 缺少 来自 json response.Can 有人帮我解决这个问题吗?
提前致谢。
资源 class 是:
public class Service {
@Autowired
private StudentDao studentDao;
@Autowired
private TutorDao tutorDaoImpl;
@GET
@Produces({MediaType.APPLICATION_JSON})
@Path("/{tutorId}")
public AllStudentSession getAllStudentForTutor(
@PathParam("tutorId") final String tutorId) {
return tutorDaoImpl.getAllAssignedStudent(tutorId);
}
}
@XmlRootElement(name = "all_student_session_info")
public class AllStudentSession {
private List<StudentSessionsResp> allStudentAssigned;
@XmlElement(name = "allStudentAssigned")
public List<StudentSessionsResp> getAllStudentAssigned() {
return allStudentAssigned;
}
public void setAllStudentAssigned(
List<StudentSessionsResp> allStudentAssigned) {
this.allStudentAssigned = allStudentAssigned;
}
}
@XmlRootElement(name = "assigned_students_tutor")
public class StudentSessionsResp {
private String childId;
private String childName;
private String parentName;
private String subject;
private String grade;
private String phoneNumber;
private AddressResp address;
private String email;
@XmlElement(name = "childId")
public String getChildId() {
return childId;
}
@XmlElement(name = "parentName")
public String getParentName() {
return parentName;
}
@XmlElement(name = "subject")
public String getSubject() {
return subject;
}
@XmlElement(name = "grade")
public String getGrade() {
return grade;
}
@XmlElement(name = "phoneNumber")
public String getPhoneNumber() {
return phoneNumber;
}
@XmlElement(name = "studentName")
public String getChildName() {
return childName;
}
@XmlElement(name = "address")
public AddressResp getAddress() {
return address;
}
@XmlElement(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setChildName(String childName) {
this.childName = childName;
}
public void setAddress(AddressResp address) {
this.address = address;
}
public void setChildId(String childId) {
this.childId = childId;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setGrade(String grade) {
this.grade = grade;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
期望的输出是:
{
"all_student_session_info": {
"allStudentAssigned": [
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b009ab4f48f6da3a135bcc",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
},
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b3e2114f482e535a109366",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
}
]
}
}
我得到的输出是:
{
"allStudentAssigned": [
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b009ab4f48f6da3a135bcc",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
},
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b3e2114f482e535a109366",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
}
]
}
这是我正在使用的 jar 的屏幕截图:
默认情况下,Jackson 不会像您期望的那样用根名称包装 JSON 对象,不过我们可以将其配置为这样做。我们可以通过配置 Jackson 的 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
// maintain JAXB annotation support
mapper.registerModule(new JaxbAnnotationModule());
要配置 Jersey 应用程序以使用此 ObjectMapper
,我们可以创建一个 ContextResolver
,如 所示。根据您的应用程序注册资源和提供程序的设置方式,ObjectMapperContextResolver
将通过 @Provider
注释自动注册(如果我们正在扫描包),或者您需要显式注册它。
我是 运行 我在 Jetty.When 中的 REST 服务(泽西岛) 我在 Response 中使用 XML 媒体类型调用 REST 方法它工作正常但是当媒体类型是 JSON 缺少 来自 json response.Can 有人帮我解决这个问题吗?
提前致谢。 资源 class 是:
public class Service {
@Autowired
private StudentDao studentDao;
@Autowired
private TutorDao tutorDaoImpl;
@GET
@Produces({MediaType.APPLICATION_JSON})
@Path("/{tutorId}")
public AllStudentSession getAllStudentForTutor(
@PathParam("tutorId") final String tutorId) {
return tutorDaoImpl.getAllAssignedStudent(tutorId);
}
}
@XmlRootElement(name = "all_student_session_info")
public class AllStudentSession {
private List<StudentSessionsResp> allStudentAssigned;
@XmlElement(name = "allStudentAssigned")
public List<StudentSessionsResp> getAllStudentAssigned() {
return allStudentAssigned;
}
public void setAllStudentAssigned(
List<StudentSessionsResp> allStudentAssigned) {
this.allStudentAssigned = allStudentAssigned;
}
}
@XmlRootElement(name = "assigned_students_tutor")
public class StudentSessionsResp {
private String childId;
private String childName;
private String parentName;
private String subject;
private String grade;
private String phoneNumber;
private AddressResp address;
private String email;
@XmlElement(name = "childId")
public String getChildId() {
return childId;
}
@XmlElement(name = "parentName")
public String getParentName() {
return parentName;
}
@XmlElement(name = "subject")
public String getSubject() {
return subject;
}
@XmlElement(name = "grade")
public String getGrade() {
return grade;
}
@XmlElement(name = "phoneNumber")
public String getPhoneNumber() {
return phoneNumber;
}
@XmlElement(name = "studentName")
public String getChildName() {
return childName;
}
@XmlElement(name = "address")
public AddressResp getAddress() {
return address;
}
@XmlElement(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setChildName(String childName) {
this.childName = childName;
}
public void setAddress(AddressResp address) {
this.address = address;
}
public void setChildId(String childId) {
this.childId = childId;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setGrade(String grade) {
this.grade = grade;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
期望的输出是:
{
"all_student_session_info": {
"allStudentAssigned": [
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b009ab4f48f6da3a135bcc",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
},
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b3e2114f482e535a109366",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
}
]
}
}
我得到的输出是:
{
"allStudentAssigned": [
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b009ab4f48f6da3a135bcc",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
},
{
"address": {
"city": "testcity",
"country": "testcountry",
"houseNumber": "10",
"pinCode": "123456",
"state": "teststate"
},
"childId": "55b3e2114f482e535a109366",
"studentName": "Testname",
"email": "testmail",
"parentName": "testname",
"phoneNumber": "123456789"
}
]
}
这是我正在使用的 jar 的屏幕截图:
默认情况下,Jackson 不会像您期望的那样用根名称包装 JSON 对象,不过我们可以将其配置为这样做。我们可以通过配置 Jackson 的 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
// maintain JAXB annotation support
mapper.registerModule(new JaxbAnnotationModule());
要配置 Jersey 应用程序以使用此 ObjectMapper
,我们可以创建一个 ContextResolver
,如 ObjectMapperContextResolver
将通过 @Provider
注释自动注册(如果我们正在扫描包),或者您需要显式注册它。