繁体   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