通过Jersey客户端发送多部分请求

时间:2018-07-21 02:23:04

标签: java rest jersey client multipartform-data

我正在尝试用Java编写客户端以从RESTful Web服务获取数据。我已经看过一些教程和视频,但是有些我不了解。让我从这个开始。我能够使用PEST在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设置此请求的提示?

enter image description here

1 个答案:

答案 0 :(得分:1)

Postman中的

form-data用于multipart/form-data。为此,您需要将multipart module与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>