如果ArrayList中只有一个对象,为什么CXF休息Web服务会返回对象?

时间:2017-02-14 05:04:09

标签: web-services rest cxf

当列表只有一个对象时,CXF rest Web服务返回对象而不是JSON数组。它适用于多个对象。你能帮我解决一下吗?

对于列表中的两个对象,JSON响应是

{
 "list": [
{
  "@xsi.type": "interaction",
  "interactionId": 92009,
  "interactionTitle": "How are you? How is going?",
  "interactionType": "Question"
},
{
  "@xsi.type": "interaction",
  "interactionId": 92004,
  "interactionTitle": "This is not working",
  "interactionType": "Complaint"
}
],
 "message": "Request successfully processed",
 "totalRecords": 5,
 "statusCode": 2000
}

对于列表中的一条记录,JSON响应是

{
 "list": {
 "@xsi.type": "interaction",
 "interactionId": 92009,
 "interactionTitle": "How are you? How is going?",
 "interactionType": "Question"
},
"message": "Request successfully processed",
"totalRecords": 5,
"statusCode": 2000
}

我期待两种情况下的JSON数组。但它返回JSON对象而不是单个对象的JSON数组。

这里我使用Apache CXF rest框架来公开Web服务。

这是服务器端代码示例

@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/interactions")
public VerveResponse<Interaction> getUserInteractions(){
    VerveResponse<Interaction> verveResponse = new VerveResponse<Interaction>();
    verveResponse.setStatusCode(""+StatusCode.PROCESSED_SUCCESSFULLY);
    verveResponse.setMessage("Request successfully processed");
    List<Interaction> interactionList = ExternalService.getInteractionList();
    verveResponse.setList(interactionList);
    return verveResponse;
}


@XmlRootElement(name = "response")
@XmlSeeAlso({Interaction.class})
public class VerveResponse<T> implements Serializable{
    private String statusCode;
    private String message;
    private List<T> list;
    private Long records;

    public String getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }

    public Long getRecords() {
        return records;
    }
    public void setRecords(Long records) {
        this.records = records;
    }
    public List<T> getList() {
        return list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }   
}

  @XmlRootElement(name = "interaction")
  public class Interaction implements Serializable {
     private Long interactionId;
     private String interactionTitle;
     private String interactionType;

    public Long getInteractionId() {
       return interactionId;
     }
    public void setInteractionId(Long interactionId) {
        this.interactionId = interactionId;
    }
    public String getInteractionTitle() {
      return interactionTitle;
    }
    public void setInteractionTitle(String interactionTitle) {
     this.interactionTitle = interactionTitle;
    }
   public String getInteractionType() {
     return interactionType;
   }
   public void setInteractionType(String interactionType) {
     this.interactionType = interactionType;
   }
}

0 个答案:

没有答案