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

用Jersey客户端发送多部分请求

端木狐若
2023-03-14

我试图用Java编写一个客户机来从RESTful web服务中获取数据。我已经看了几个教程和视频,但有一些我不明白。让我从这个开始。我能够使用PEST编写一个clientin PHP来获得成功的响应。这是一个如何发出请求的示例:

<?php
    require_once('vendor\educoder\pest\Pest.php');

    $sourceCredentials = array(
        "SourceName" => 'username',
        "Password" => 'password',
        "SiteID" => siteID);


    $params = array(
        "ResponseFormat" => 'JSON',
        "ResponseDetial => 'Full'");

    $request = array_merge(array("SourceCredentials"=>$sourceCredentials),$params);

    $pest = new Pest('https://api.something.com');

    $results = json_decode($pest->post('ClientService/GetClients',$request));

    $clients = $results->Clients;

我发现有些事情很尴尬,我不太熟悉RESTful客户。出于某种原因,该站点使用POST请求而不是GET请求。凭据作为表单数据和任何查询参数在主体中传递。我查看的教程不是这样设置的。我不确定如何使用Jersey在Java中编写此请求。有人能给我一些关于使用jersey-client设置这个请求的建议吗?

共有1个答案

陶璞
2023-03-14

Postman中的form-data用于多部分/form-data。为此,您需要将multipart模块与Jersey客户机一起使用。就代码而言,您只需执行以下操作:

Client client = ClientBuilder.newBuilder()
         .register(MultiPartFeature.class)
         .build();
FormDataMultiPart multiPart = new FormDataMultiPart()
        .field("SourceCredentials[SourceName]", "...")
        .field("ResponseFormat", "JSON")
        .field("...", "...");
Response response = client.target(url)
        .request()
        .header("...", "...")
        .post(Entity.entity(multiPart, multiPart.getMediaType());

并确保您有多部分依赖关系。

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version${jersey2.version}</version>
</dependency>
 类似资料:
  • 我正在使用Perl的REST::Client发出多部分POST请求: REST API 如下所示: 当我运行脚本时,出现以下错误: 解析多部分servlet请求失败;嵌套异常java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界] 我是perl新手,语法或其他方

  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 在我的代码中,我试图反复构建一个客户端,并向远程endpoint发送一个输入流: 输入流包含消息的xml正文。我注意到在第一次迭代中。。。请求成功第二次迭代响应为400错误请求。。。第三个400错误请求。。。。等等。。。 如果我将输入流更改为字符串...获取真实的xml并用PUT方法发送它。 有什么区别?为什么它可以处理字符串而不能处理输入流?(似乎inputstream在第一次迭代后会发生变化)

  • 问题内容: 首先,让我解释一下上下文: 我必须创建一个客户端,该客户端将发送许多HTTP请求以下载图像。这些请求必须是异步的,因为一旦完成图像,它将被添加到队列中,然后打印到屏幕上。由于图像可能很大且响应分块,因此我的处理程序必须将其聚合到缓冲区中。 因此,我遵循Netty示例代码(HTTP勺示例)。 目前,我有三个静态映射,用于为每个通道存储通道ID和缓冲区/块布尔值/我的最终对象。 在那之后,

  • 按照这里的Apache HttpAsyncClient示例,HTTPGET请求并不是一次性触发的,而是(大部分)同步触发的。 下图显示了请求的发送顺序(除了一个)。当增加请求数量时,这仍然是正确的。 我使用了另一个库(AsynHttpClient ),请求发送得更快,而且是随机的。 有什么办法可以改进这段代码,让它真正异步执行? 我添加了用于参考的代码。

  • 我正在尝试创建RESTful web服务,但无法使删除生效,我不确定问题在哪里。我认为问题在客户端项目中,但也可能在服务器项目的资源类中。 我有一个使用这种方法的学生道课,我不认为这是一个问题,因为它适用于其他项目。 我有一个StudentResource类,它是我从包含这段代码的模式中创建的RESTful资源 然后,我创建了一个java项目,并使用此方法创建了名为OneStudent的RESTf