当前位置: 首页 > 知识库问答 >
问题:

泽西REST客户端:发布MultiPart数据

颜志学
2023-03-14

我正在尝试编写一个Jersey客户端应用程序,它可以将多部分表单数据发布到Restful Jersey服务。我需要发布一个包含数据的CSV文件和一个包含元数据的JSON文件。我使用的是Jersey客户端1.18.3。这是我的密码(为了公司保密,有些名字已经改了)。。。

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/mariam/service/playWithDad");


    FileDataBodyPart filePart = new FileDataBodyPart("file", 
            new File("C:/Users/Admin/Desktop/input/games.csv"));

    String playWithDadMetaJson
    = "{\n"
    + "    \"sandboxIndicator\": true,\n"
    + "    \"skipBadLines\": false,\n"
    + "    \"fileSeparator\": \"COMMA\",\n"
    + "    \"blockSize\": false,\n"
    + "    \"gameUUID\": \"43a004c9-2130-4e75-8fd4-e5fccae31840\",\n"
    + "    \"useFriends\": \"false\"\n"
    + "}\n"
    + "";

    MultiPart multipartEntity = new FormDataMultiPart()
    .field("meta", playWithDadMetaJson, MediaType.APPLICATION_JSON_TYPE)
    .bodyPart(filePart);

    ClientResponse response = webResource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(multipartEntity);

现在我在最后一行得到一个编译错误,说它不能从void转换到ClientResponse。

我之前从这篇文章中得到了一些关于RestFul服务本身的指导。。

Java Rest Jersey:发布多种类型的数据(文件和JSON)

共有2个答案

燕意蕴
2023-03-14

“现在我在最后一行收到一个编译错误,说它不能从void转换到ClientResponse。”

查看javadoc以获取WebResource。查看post(Object)(带有Object arg)。它返回无效。

您需要使用重载的post(类returnType,requestEntity),它返回returnType类型的实例。

所以你应该做这样的事情

ClientResponse response = webResource
        .type(MediaType.MULTIPART_FORM_DATA_TYPE)
        .post(ClientResponse.class, multipartEntity);
狄令
2023-03-14

遵循泽西留档,他们提供示例客户端代码。以下是发布多部分请求的片段:

final MultiPart multiPartEntity = new MultiPart()
        .bodyPart(new BodyPart().entity("hello"))
        .bodyPart(new BodyPart(new JaxbBean("xml"), MediaType.APPLICATION_XML_TYPE))
        .bodyPart(new BodyPart(new JaxbBean("json"), MediaType.APPLICATION_JSON_TYPE));

final WebTarget target = // Create WebTarget.
final Response response = target
        .request()
        .post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
 类似资料:
  • 我设计了一个多部分Jersey REST服务,如下所示,用于接收多部分请求(文件上传)并将文件保存在磁盘位置: 我的测试客户是: 但我无法得到回应。 当我使用HTML网页作为客户端通过调用REST服务上传文件时,它工作得很好,但从REST客户端它不工作。 客户有什么需要更改的吗?

  • 我正在学习JAX-RS和泽西。我正在尝试将数据发布到URL,但我有一个我不知道要解决的问题: 现在,当它只是一个字符串时,一切都很好,但是服务器期望字段量的浮动数据类型,但是当我尝试在没有的情况下使用它时,我收到一个错误。如何添加具有不同数据类型的参数,以便发布?

  • 我对使用Android上的泽西客户端API的Multipart表单数据POST请求有问题。我一直在关注网络上的各种示例,它们在实现方面都非常相似。 当我在设备上执行这段代码时,出现了一个异常: 我以为Jersey应该在没有任何额外配置的情况下处理文件对象。删除车身线条将允许Jersey提出请求,但这消除了这一点。 我的构建路径上有这些库(它们是由Maven引入的): < li >球衣-客户端-1.

  • 我有一个网站,我只是想写一个脚本,发送字符串到一个文本输入在页面(唯一的一个)和点击提交。我构建了一个selenium系统,但被告知这是矫枉过正的,访问页面上的endpoint并以这种方式发送文本要“容易”得多。 线程“main”java.lang.IllegalStateException中出现异常:未找到InjectionManagerFactory。在org.glassfish.jersey

  • 当我的客户机应用程序尝试从我的安全RESTWeb服务请求资源时,我得到了粘贴在下面的错误。 我已经在这个主题上找到了这个答案,但是额外的代码似乎很极端。使用泽西岛客户端访问安全的宁静Web服务 有谁知道解决问题的更简单的方法吗? 我的项目:在服务器端,我正在使用jdbc realm的基本身份验证,这在浏览器中使用时工作正常。在客户端,我设置了用户名和密码,当我发送请求时发生错误。如果您需要代码片段

  • 我使用客户机对一个API进行REST调用,该API返回mulipart中的一个Json和一个PDF文件作为响应的第一和第二部分。 使用上面的客户端解析这个多部分响应的正确方法是什么?