web-dev-qa-db-ja.com

HTTPリクエストにアクセスするにはどうすればよいですか?

通常、JavaにRESTメソッドがあるとしましょう

@POST 
    @Path("/test")
    @Produces(MediaType.APPLICATION_JSON)
    public String showTime(@FormParam("username") String userName) {

:
:
:
}

これは問題ありませんが、次のようなジャージーを使用して完全なHTTPリクエストにアクセスできる方法はあるのでしょうか。

@POST 
    @Path("/test")
    @Produces(MediaType.APPLICATION_JSON)
    public String showTime(@FormParam("username") String userName,@XXXXXX String httpRequest) {

:
:
:
}

ここで、いくつかの注釈は変数に格納するための完全なHTTPリクエストを提供します。 @POSTを使用してみましたが、動作しないようです。助言がありますか。

ありがとう

31
John

@Contextアノテーションを使用できます。

@POST 
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String showTime(
    @FormParam("username") String userName,
    @Context HttpServletRequest httpRequest
) {
    // The method body
}
52
sdorra

これに対処するためにヘルパー関数を書きました。リクエストヘッダーを抽出してマップに配置するだけです。

private Map<String, String> extractHeaders(HttpServletRequest httpServletRequest) {

    Map<String, String> map = new HashMap<>();
    Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String header = headerNames.nextElement();
        map.put(header, httpServletRequest.getHeader(header));
    }

    return map;
}
1
Teddy Wilson

リクエストの本文を取得する場合は、この投稿に記載されているヒントを使用できます: Jerseyを使用して完全なRESTリクエストの本文を取得する方法

リクエスト自体について詳しく知る必要がある場合は、sdorraで言及されている@Contextアノテーションを試すことができます。

0
Jan Thomä