在CURL命令中传递json结构或数组数据以测试我的REST服务

在CURL命令中传递json结构或数组数据以测试我的REST服务,rest,curl,dropwizard,Rest,Curl,Dropwizard,我希望使用CURL命令在dropwizard上测试我的REST资源。我能够上传文件,并获得内容和文件名。但是除了文件之外,我还想传递一些ID列表 如何在下面的CURL命令中将长ID列表(长数据类型的数组)传递给REST服务 如果需要,我可以在下面的命令中另外传递json结构以及我的文件内容吗 CURL命令 curl -F 'file=@/cygdrive/c/TestDocument1.txt' http://localhost:8199/test-app/api/upload-document

我希望使用CURL命令在dropwizard上测试我的REST资源。我能够上传文件,并获得内容和文件名。但是除了文件之外,我还想传递一些ID列表

  • 如何在下面的CURL命令中将长ID列表(长数据类型的数组)传递给REST服务
  • 如果需要,我可以在下面的命令中另外传递json结构以及我的文件内容吗
  • CURL命令

    curl -F 'file=@/cygdrive/c/TestDocument1.txt' http://localhost:8199/test-app/api/upload-documents/1004/documents
    
    上传文件的REST服务

     @POST
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        @Path("/reconciliation-details/{reconciliationDetailId}/documents")
        public Response uploadDocument(@FormDataParam("file") File inventoryDocumentContent,
                                                @FormDataParam("file") FormDataContentDisposition fileDetail,
                                                @FormDataParam("reconciliationIds") List<Long> reconciliationIds) throws Exception {
                byte[] documentContent = FileUtils.readFileToByteArray(inventoryDocumentContent);
                String documentName = fileDetail.getFileName();
                reconDetailsService.uploadDocument(documentName, documentContent, reconciliationIds);           
            return ResponseHelper.createOkResponse();
        }
    
    @POST
    @使用(MediaType.MULTIPART\u FORM\u数据)
    @路径(“/ReconficationDetails/{ReconficationDetailId}/documents”)
    公共响应上载文档(@FormDataParam(“文件”)文件清单DocumentContent,
    @FormDataParam(“文件”)FormDataContentDisposition文件详细信息,
    @FormDataParam(“对账ID”)列表对账ID)引发异常{
    字节[]documentContent=FileUtils.readFileToByteArray(inventoryDocumentContent);
    String documentName=fileDetail.getFileName();
    reconDetailsService.uploadDocument(文档名称、文档内容、对账ID);
    返回ResponseHelper.createOkResponse();
    }
    
    您需要将内容类型设置为application/json。但是-d发送内容类型application/x-www-form-urlencoded,这在Spring方面是不被接受的

    查看curl手册页,我认为您可以使用-H:

    -H "Content-Type: application/json"
    
    完整示例:

    curl -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login
    
    (-H是--header的缩写,-d是--data的缩写。)

    用于带文件的Json

    curl -i -X POST -H "Content-Type: multipart/mixed" -F "blob=@/Users/username/Documents/bio.jpg" -F "metadata={\"edipi\":123456789,\"firstName\":\"John\",\"lastName\":\"Smith\",\"email\":\"john.smith@gmail.com\"};type=application/json" http://localhost:8080/api/v1/user/
    

    使用multipart,每个部分都可以有自己的内容类型头。默认情况下,如果未指定,则使用
    text/plain
    。有些客户端无法为单个部件设置内容类型(其中提到了一个解决方案),但cURL具有此功能。您只需要附加
    ;类型=
    。比如说

    -F "reconciliationIds=[1, 2, 3, 4];type=application/json"
    
    除了使用实际的JSON数组,您还可以使用包含JSON的文件

    -F "reconciliationIds=@path-to-json;type=application/json"
    
    Jersey将看到此部分的内容类型是application/json,并使用通常用于json的反序列化程序


    请务必查看上面的链接帖子——尽管这可能有效,但您不希望将用户限制为仅使用具有此功能的客户端。文章的底部给出了解决方案,尽管我没有用
    列表测试它。我不确定使用
    getEntityAs(Class)
    如何工作,因为您无法传递泛型
    Long
    类型。您可以始终将其包装在POJO中,而不只是使用列表。

    我需要将内容类型作为多部分/表单数据发送,因为我正在上载文件并将其内容作为表单数据负载发送。因此,我的问题是,除了表单数据内容之外,如何发送ID列表或json结构?谢谢@peeskillet,这很好。谢谢你的帮助。