繁体   English   中英

Jersey客户端未设置Content-Length

[英]Jersey Client doesn't set Content-Length

我正在使用dropwizard编写webapp并使用Jersey客户端,如http://dropwizard.codahale.com/manual/client/#man-client-jersey中所述

但似乎每当我尝试使用泽西客户端进行帖子时,远程web服务都会抱怨Content-Length标头丢失并失败。

public JobResponse createJob(JobRequest job) {
        return jerseyClient.resource(URI.create(JOBS_URL))
                .type(MediaType.APPLICATION_JSON_TYPE)
                .header("Api-Key", job.getApiKey())
                .post(JobResponse.class, job);
    }

我已经确认该请求不包含标题,尽管我付出了最大努力,但我还是无法弄清楚为什么会发生这种情况。 有谁知道我有什么遗失的东西吗?

PS:我想要的服务是https://app.zencoder.com/docs/api/jobs/create

这是已知的“问题”,实际上是预期的行为。

这里的问题是在将标题写入“连线”之后处理实体,因此在标题被序列化时不知道Content-Length标头值。 如果你需要它,你有几个选择(具有各种复杂性):

  1. 自己序列化实体; 如果您将实体提供为字符串(或byte []),则应设置Content-Length。

  2. 创建自己的MessageBodyWriter,它将在getSize()方法调用中计算实体的大小。

可能还有其他一些方法可以做到这一点,但我现在想不出另一种方式..希望它有所帮助。

我遇到了同样的问题,Pavel的答案对我来说没有用(我使用的是FormMutiPart对象)。

我使用的是ApacheHttpClient4而不是常规的com.sun.jersey.api.client.Client 更改回Jersey客户端,计算Content-Lenght(至少在FormMultiPart实体的情况下)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM