Java ApacheHTTP:如何设置自定义ContentType

Java ApacheHTTP:如何设置自定义ContentType,java,http,mime-types,apache-httpclient-4.x,apache-httpcomponents,Java,Http,Mime Types,Apache Httpclient 4.x,Apache Httpcomponents,我正在使用ApacheHTTP客户端将文件上载为 public void whenSendMultipartRequestUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://www

我正在使用ApacheHTTP客户端将文件上载为

public void whenSendMultipartRequestUsingHttpClient_thenCorrect() 
  throws ClientProtocolException, IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost("http://www.example.com");

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addTextBody("ads", "John");
    builder.addTextBody("qwe", "pass");
    builder.addBinaryBody("file", new File("test.txt"),
      ContentType.APPLICATION_OCTET_STREAM, "file.ext");

    HttpEntity multipart = builder.build();
    httpPost.setEntity(multipart);

    CloseableHttpResponse response = client.execute(httpPost);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
    client.close();
}
问题是服务器端需要文件的
ContentType
application/myCustomTag

但是,这不是
ContentType
界面中的值。我有没有办法提供一个自定义字符串作为
ContentType

编辑

我试图重新创建浏览器上显示的请求

将我的请求头作为

[X-head1: {someJson}, Accept: application/json, X-head2: someVal, X-head3: otherVal, Content-Type: application/json]
以及有效载荷

[Content-Disposition: form-data; name="file.ext"; filename="test.txt", Content-Type: application/octet-stream, Content-Transfer-Encoding: binary]
我能看到的关键区别是,在有效负载中,我在浏览器中看到以下内容

内容类型:应用程序/myCustomTag


这不是HTTP标准的
内容类型
,因此我无法将其设置为该类型

您是否尝试在HttpPost上设置setHeader?

备选方案:


ContentType.create(“应用程序/myCustomTag”)

您是否尝试使用ContentType.MULTIPART\u FORM\u数据?关于
httpPost.addHeader(“内容类型”,“应用程序/myCustomTag”)谢谢,我试过了,但我还是从服务器上得到了500我用另一个选项编辑了我的答案。(与addBinaryBody一起使用)