Jersey客户端未设置Content-Length

Ank*_*han 6 java http jersey dropwizard

我正在使用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);
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Pav*_*cek 7

这是已知的"问题",实际上是预期的行为.

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

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

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

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