无法在 REST 网络服务中解析 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);
            }
        }
        ...
        ...
    }

我在 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.invoke(JavaMethodInvokerFactory.java:60)         

Java此项目的构建路径如下

您发送的 JSON 数据中没有可用的组列表,这就是 grpList.getGroupsList() returns null 的原因。 从 LinkUserToGroup 的 POJO 定义来看,键 groups 应该是一个 JSON 数组。请尝试使用以下 JSON 数据。

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