簡體   English   中英

無法解析REST Web服務中的JSON

[英]Can not parse JSON in REST webservices

我已經開發了可以使用JAXB框架解析XML有效負載的Web服務。 現在,我需要擴展此Web服務,以JSON格式解析相同的有效負載。 以下適用於XML有效負載的邏輯不適用於JSON有效負載。 感謝您的投入。

XML有效載荷

<?xml version="1.0" encoding="UTF-8" ?>
<LinkUserToGroup>
<groups>
    <group>
        <id>dbb8</id>
    </group>
    <group>
        <id>ce50</id>
    </group>
</groups>
</LinkUserToGroup>

JSON有效負載(無效)

{
  "LinkUserToGroup": {
    "groups": {
      "group": [
        { "id": "dbb8" },
        { "id": "ce50" }
      ]
    }
  }
}

POJO類

LinkUserToGroup.java

@XmlRootElement(name = "LinkUserToGroup")
@XmlAccessorType (XmlAccessType.FIELD)
@JsonIgnoreProperties(ignoreUnknown = true)
public class LinkUserToGroup {

    @JsonProperty("groups")
    @XmlElement(name = "groups")
    private List<Groups>  groupsList;

    public List<Groups> getGroupsList() {
        return groupsList;
    }

    public void setGroupsList(List<Groups> groupsList) {
        this.groupsList = groupsList;
    }
}

Groups.java

@XmlRootElement(name = "groups")
@XmlAccessorType (XmlAccessType.FIELD)
public class Groups {

    @XmlElement(name = "group")
    @JsonProperty("group")
    private List<GroupVO>  groups;

    public List<GroupVO> getGroups() {
        return groups;
    }

    public void setGroups(List<GroupVO> groups) {
        this.groups = groups;
    }

}

GroupVO.java

@XmlRootElement(name = "group")
@XmlAccessorType (XmlAccessType.FIELD)
public class GroupVO {

  @JsonProperty("id")   
  @XmlElement(name = "id")  
  private String id;

  public String getID() {
    return id;
  }

  public void setURI(String id) {
    this.id = id;
  }
}

service.java

    @POST
    @Path("/{id}/groups")
    @Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public Response addGroupToUser(@PathParam("id") String key, LinkUserToGroup grpList) {

    List<Groups> groups = grpList.getGroupsList();
    List<GroupVO> groupVO;
    for (Groups gr : groups) {
        groupVO = gr.getGroups();
            for(GroupVO g : groupVO){
                eachGroupID = g.getID();
                logger.debug(" Current Group is::"+eachGroupID);
            }
        }
        ...
        ...
    }

我在(Groups gr:groups)處獲得空指針異常

堆棧跟蹤

May 20, 2017 10:43:42 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
    at com.services.UserGroupWSOperations.addGroupToUser(UserGroupWSOperations.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)         

該項目的Java構建路徑如下

在此處輸入圖片說明

您發送的JSON數據中沒有可用的組列表,這就是grpList.getGroupsList()返回null的原因。 根據LinkUserToGroup的POJO定義,鍵groups應為JSON數組。 請嘗試使用以下JSON數據。

{
   "groups": [
      {
         "group": [
            {
               "id": "dbb8"
            },
            {
               "id": "ce50"
            }
         ]
      }
   ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM