レストレットを使用したヘッド応答のメッセージヘッダーを構築する方法

StackOverflow https://stackoverflow.com/questions/6303836

  •  25-10-2019
  •  | 
  •  

質問

Restletでヘッドレスポンスを作成しようとしています。残念ながら、onyがあります @Get 注釈、しかしレストレットの著者 状態, 、あなたが使用する必要があること @Get, 、次に、メソッドを比較します。として ドキュメント/仕様 ボディはありませんが、メッセージヘッダーだけがあります。

次のコードが機能しないため、サーバーに送信されるメッセージヘッダーを作成する方法は、このヘッダーを送信します:HTTP/1.1 204コンテンツなし、コンテンツレングス:0

protected void addResponseHeader(String name, String value) {
    Form responseHeaders = (Form)getResponse().getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    if (responseHeaders == null) {
        responseHeaders = new Form();
        getResponse().getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, responseHeaders);
    }
    responseHeaders.add(new Parameter(name, value));
}

サーバー側のコンクリートコード:

@Get
public void execute() {
    if (Method.HEAD.equals(getMethod())) {
        //optional: getResponse().getEntity().setMediaType(MediaType.TEXT_PLAIN);
        getResponse().setStatus(Status.SUCCESS_OK, "hello head");
        addResponseHeader("X-my-header", "value");
    }
}

クライアントコード:

@Test
public void head() {
    Request request = new Request(Method.HEAD, url);
    Response response = query(request);
    assertEquals(Status.SUCCESS_OK, response.getStatus());
    Form form = (Form)response.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    assertEquals("value", form.getFirstValue("X-my-value")); // does fail because it is null
}
役に立ちましたか?

解決

@get for real:httpを使用して作業する必要があるだけです。その後、HTTPヘッドを発行すると、フレームワークによって自動的に処理されます。他に何もすることはありません。正しく実装されることに集中してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top