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



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

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

卷曲命令

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();
}

对于多部分,每个部分都可以有自己的内容类型标头。默认情况下,如果未指定,则使用text/plain。一些客户端无法为单个部分设置内容类型,如本文所述(其中提到了解决方案(,但 cURL 具有此功能。您只需要附加;type=<content-type>.例如

-F "reconciliationIds=[1, 2, 3, 4];type=application/json"

除了使用实际的 JSON 数组之外,您还可以使用包含 JSON 的文件

-F "reconciliationIds=@path-to-json;type=application/json"

Jersey 将看到此部分的内容类型是应用程序/json,并使用通常用于 JSON 的反序列化程序

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

您需要将内容类型设置为应用程序/json。但是 -d 发送 Content-Type 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/

最新更新