Jersey:如何使用具有查询参数的客户端和图像发出POST请求?

时间:2016-05-05 20:22:42

标签: java image post jersey

我正在使用Jersey 2.22。我的代码:

   WebTarget target = ClientBuilder.newClient().target("https://api.someurl.com");
   MultivaluedMap<String, String> map = new MultivaluedHashMap<>();

   map.add("param1", "1");
   map.add("param2", "2");
   map.add("param3", "3");

   Response response = target.request().post(Entity.form(map));

这很好,但是,我想要包含一个图像,我不知道该怎么做。我已阅读文档但无法找到如何操作。

1 个答案:

答案 0 :(得分:0)

所以,我发现存在jersey-media-multipart模块。我将它添加到我的依赖项并将我的代码更改为:

Client client = ClientBuilder.newClient();
client.register(MultiPartFeature.class);
WebTarget target = client.target("https://apisomeurl.com");

MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);

//Image here
FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("image", new File("/some/img/path/img.png"));
multiPart.bodyPart(fileDataBodyPart);

//MediaType.APPLICATION_JSON_TYPE because I'm expecting a JSON response from the server           
String str = target.queryParam("param1", "1")
                   .queryParam("param2", "2")
                   .queryParam("param3", "3")
                   .request(MediaType.APPLICATION_JSON_TYPE)
                   .post(Entity.entity(multiPart, multiPart.getMediaType()), String.class);