在Cygwin的HTTP PUT请求中添加JSON作为消息体?

时间:2016-12-08 15:13:47

标签: java arrays json rest curl

我有以下JSON,我已使用JsonLint进行了验证:

{
        "names": [
            {
                "id":"123",
                "name":"stubName",
                "type":"stubType",
            }
        ]
    }

我想在我的CURL命令(使用Cygwin)中将其添加为消息正文,以便测试我编写的REST处理程序。

我目前正在使用此命令,我是通过阅读this answer创建的:

 curl -H "Content-Type: application/json" -X PUT -d '{
        "names": [
            {
                "id":"123",
                "name":"StubName",
                "type":"StubType",
            }
        ]
    }' localhost:9980/Id/123/version/123/addPerson

我的处理程序如下:

            @PUT
            @Consumes("application/json")
            @Path("/Id/{Id}/version/{version}/addPerson")
            public Response addPerson(@PathParam("Id") String Id,
                                                    @PathParam("version") String version, 
                                                     @Context List<Name> names) {

            LOGGER.info("NAMES PASSED : {}", names.toString());

    }

当我尝试使用CURL命中我的方法时,我得到一个HTTP 400方法。

编辑:当我尝试执行names.toString()时,我得到一个空指针,这意味着名称列表必须为空。

1 个答案:

答案 0 :(得分:1)

  1. 您不应该使用@Context实体主体(参数)应该是无注释的。

     public Response addPerson(@PathParam("Id") String Id,
                               @PathParam("version") String version, 
                               List<Name> names) {
    
  2. 使用List<Name>,您应该发送一个JSON数组。摆脱{"names":,然后发送[]

    curl -H "Content-Type: application/json" -X PUT -d '[
        {
            "id":"123",
            "name":"StubName",
            "type":"StubType",
        }
    ]' localhost:9980/Id/123/version/123/addPerson