无法解析 REST 网络服务中的 JSON

用户2961454

我开发了可以使用 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;
    }
}

组.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;
    }

}

群组VO.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;
  }
}

服务.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);
            }
        }
        ...
        ...
    }

我在for (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. 从 的 POJO 定义来看LinkUserToGroup,键groups应该是一个 JSON 数组。请尝试使用以下 JSON 数据。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章