web-dev-qa-db-ja.com

カスタム応答ヘッダーJersey / Java

私は以下を達成しようとしています。

Requestからカスタムヘッダーとその値を読み取ります。

name: username

これで、応答時に、同じヘッダーname:value HTTP応答のペア。

JAX-RS WebサービスのJersey 2.0実装を使用しています。

リクエストURLを送信するときHttp://localhost/test/、リクエストヘッダーも渡されます(しばらくの間、Firefoxプラグイン-ハードコーディングされます)。

そのURLのリクエストを受信すると、次のメソッドが呼び出されます。

@GET
@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header) {
    MultivaluedMap<String, String> headerParams = header.getRequestHeaders();
    String userKey = "name";
    headerParams.get(userKey);

    // ...

    return user_object;
}

どうすればこれを達成できますか?どんなポインタも素晴らしいでしょう!

27
Namenoobie

単に@Context HttpServletResponse responseをメソッドの引数として。その上のヘッダーを変更する

@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) {
    response.setHeader("yourheadername", "yourheadervalue");
    ...
}
36

javax.ws.rs.core.Responseはよりエレガントで、ジャージーの一部です。前の答えを拡張するために、簡単な例を示します。

    @GET
    @Produces({ MediaType.APPLICATION_JSON })
    @Path("/values")
    public Response getValues(String body) {

        //Prepare your entity

        Response response = Response.status(200).
                entity(yourEntity).
                header("yourHeaderName", "yourHeaderValue").build();

        return response;
    }
49
Alex P

ResponseをエンティティとしてUserClass(JAX-RSのクラス)を返します。 Responseでは、HTTPヘッダーを設定できます。

2
user1907906