簡體   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