在apache http客户端中,如何将StringBody中的Content-Type保持为空或null?

时间:2016-10-24 10:19:14

标签: java rest httpclient apache-httpclient-4.x apache-commons-httpclient

我们有一个安静的API(我们无法更改),如果某个部分的Content-Type值为null,我们会进行特定的处理。

在httpclient3.x之前,我们可以执行以下操作并将内容类型设置为null。

Grocery

现在,我们已经转移到http组件(httpclient4.x jar),我意识到我们需要传递一个ContentBody实例(确切地说是StringBody)。在新版本中找到了以下两种相同的方法:

StringPart sp = new StringPart("name, "value")
sp.setContentType(null);

然而,我无法通过没有Content-Type的身体。即使我对StringBody使用了弃用的构造函数,它也会将Content-Type设置为纯文本。

我知道请求的任何部分都应该始终具有Content-Type,但这是过时的目标服务器的特例,我们无法升级。

1 个答案:

答案 0 :(得分:2)

我认为您唯一的选择是使用已弃用的FormBodyPart#FormBodyPart(String name, ContentBody)构造函数 AND 来覆盖已弃用的FormBodyPart#generateContentType方法。

FormBodyPart bodyPart = new FormBodyPart("stuff", new StringBody("stuff", ContentType.DEFAULT_TEXT)) {

    @Override
    protected void generateContentType(ContentBody body) {
    }

};
HttpEntity entity = MultipartEntityBuilder.create().addPart(bodyPart).build();
entity.writeTo(System.out);

std out>

--yJHqjnFj0u-dWGPGkGtK_NnOgUeOspQ
Content-Disposition: form-data; name="stuff"
Content-Transfer-Encoding: 8bit

stuff
--yJHqjnFj0u-dWGPGkGtK_NnOgUeOspQ--