web-dev-qa-db-ja.com

RESTful WebサービスでのHttpServletRequestオブジェクトへのアクセスの取得

次のようにして、SOAP WebサービスのHttpServletリクエストオブジェクトにアクセスできます。サービス実装でWebServiceContextのプライベートフィールドを宣言し、リソースとして注釈を付けます。

@Resource
private WebServiceContext context;

HttpServletRequetオブジェクトを取得するには、次のようにコードを記述します。

MessageContext ctx = context.getMessageContext();
HttpServletRequest request =(HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);

しかし、これらは安らかなWebサービスでは機能しません。安らかなWebサービスの開発にApache CXFを使用しています。 HttpServletRequestオブジェクトにアクセスする方法を教えてください。

15
Surya

org.Apache.cxf.jaxrs.ext.MessageContextの使用をお勧めします

import javax.ws.rs.core.Context;
import org.Apache.cxf.jaxrs.ext.MessageContext;

...
// add the attribute to your implementation
@Context 
private MessageContext context;

...
// then you can access the request/response/session etc in your methods
HttpServletRequest req = context.getHttpServletRequest();
HttpServletResponse res = context.getHttpServletResponse()

@Contextアノテーションを使用して、他のタイプ(特にServletContextやHttpServletRequestなど)にフラグを付けることができます。 コンテキスト注釈を参照してください。

14
kevinjansz

各リクエストのアクセスリクエストとレスポンスにこのコードを使用します。

@Path("/User")
public class RestClass{

    @GET
    @Path("/getUserInfo")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUserrDetails(@Context HttpServletRequest request,
            @Context HttpServletResponse response) {
        String username = request.getParameter("txt_username");
        String password = request.getParameter("txt_password");
        System.out.println(username);
        System.out.println(password);

        User user = new User(username, password);

        return Response.ok().status(200).entity(user).build();
    }
... 
}
1
M2E67