我有一个简单的Java RESTful API端点,可以让Jersey处理编组。
当accept=application/json
工作正常并返回预期时。
当accept=application/xml
返回500 server error
在什么情况下编组为json而不是xml工作,我错过了什么?
这是我的代码:
@GET
@Path("/client/{clientId}/technicalrep")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@WebinarSecurityFilter
@WebinarClientValidationFilter
public Response getTechnicalRepContacts(@PathParam("clientId") Long clientId, @HeaderParam("accept") String accept){
if (isAcceptInvalid(accept)) {
return Response.status(Response.Status.PRECONDITION_FAILED).entity(new PlatformApiMessage().withMessage("The header parameter Accept is mandatory")).build();
}
List<ClientTechnicalContact> technicalContacs = wccClientService.findClientTechnicalContactsByClientId(clientId);
if (technicalContacs == null || technicalContacs.size() == 0) {
return Response.ok(new PlatformApiMessage().withMessage("No Technical Rep Contacts found.")).build();
} else {
ClientLevelTechnicalContacts clientLevelTechnicalContacts = new ClientLevelTechnicalContacts(clientId,technicalContacs);
return Response.ok(clientLevelTechnicalContacts).build();
}
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ClientLevelTechnicalContacts {
private long clientid;
@XmlElement(name = "technicalcontact")
private List<ClientTechnicalContact> technicalcontacts;
public ClientLevelTechnicalContacts(long clientid,List<ClientTechnicalContact> technicalcontacts) {
this.clientid = clientid;
this.technicalcontacts = technicalcontacts;
}
public long getClientid() {
return clientid;
}
public void setClientid(long clientid) {
this.clientid = clientid;
}
public List<ClientTechnicalContact> getTechnicalcontacts() {
return technicalcontacts;
}
public void setTechnicalcontacts(List<ClientTechnicalContact> technicalcontacts) {
this.technicalcontacts = technicalcontacts;
}
}
@XmlRootElement(name="technicalcontacts")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClientTechnicalContact {
private long contactid;
private String contactname;
public ClientTechnicalContact(){}
public ClientTechnicalContact(long contactid, String contactname) {
super();
this.contactid = contactid;
this.contactname = contactname;
}
public long getContactid() {
return contactid;
}
public void setContactid(long contactid) {
this.contactid = contactid;
}
public String getContactname() {
return contactname;
}
public void setContactname(String contactname) {
this.contactname = contactname;
}
}
答案 0 :(得分:0)
愚蠢的错误,但确实是编组/解组的必要条件。
每个DTO
必须有一个默认/空构造函数,否则它将无法工作,而ClientLevelTechnicalContacts
缺少一个空构造函数。
我不明白为什么没有更好的堆栈跟踪。无论如何,解决方案是在ClientLevelTechnicalContacts
中放置一个空构造函数。