6

http://dropwizard.codahale.com/manual/client/#man-client-jerseyに記載されているように、webapp の作成に dropwizard を使用し、Jersey 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です

4

2 に答える 2

7

これは既知の「問題」であり、実際に意図された動作です。

ここでの問題は、ヘッダーが「ワイヤ」に書き出された後にエンティティが処理されるため、ヘッダーがいつシリアル化されるかが Content-Length ヘッダー値がわからないことです。必要な場合は、いくつかのオプションがあります (さまざまな複雑さがあります)。

  1. 自分でエンティティをシリアル化します。エンティティを文字列 (または byte[]) として提供する場合、Content-Length を設定する必要があります。

  2. getSize() メソッド呼び出しでエンティティのサイズを計算する独自の MessageBodyWriter を作成します。

他の方法があるかもしれませんが、今は別の方法が思いつきません..お役に立てば幸いです。

于 2012-09-27T12:53:12.273 に答える
3

私は同じ問題に直面していましたが、Pavel からの回答はうまくいきませんでした (私は FormMutiPart オブジェクトを使用していました)。

通常のcom.sun.jersey.api.client.Clientの代わりにApacheHttpClient4を使用していました。Jersey クライアントに戻ると、Content-Lenght が計算されます (少なくとも FormMultiPart エンティティの場合)。

于 2013-10-25T17:21:53.770 に答える