2017-07-14 6 views
1

のは、私はこのコードを持っているとしましょう:私は残りのエントリーポイント/テストを呼び出すために、文字列barを取得するために期待していた`@context HttpServletRequest`にヘッダーを挿入する方法は?

@ApplicationPath("...") 
public class MyApp extends ResourceConfig { 
    public SalesLayerApplication() { 
     this.register(HeaderInjecterFilter.class); 
     this.register(Test.class); 
    } 
} 

@PreMatching 
public class HeaderInjecterFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(final ContainerRequestContext crc) throws IOException { 
     crc.getHeaders().add("foo", "bar"); 
    } 
} 

@Path("/test") 
public class Test { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String dump(@Context final HttpServletRequest request) { 
     return request.getHeader("foo"); 
    } 
} 

しかし、私は私が正しく変数を取得@HeaderParam("foo")を使用しますが、私は@Context HttpServletRequest througアクセスする必要がある場合は、私が見るすべては

nullです。

答えて

0

なぜContainerRequestContextにヘッダーを追加するとHttpServletRequestにも追加されると思いますか?これらは完全に無関係のエンティティです。 HttpHeadersを注射するか、ContainerRequestContextを直接注入することもできます。

+0

リクエストのコンテキストのヘッダがリクエストのヘッダと異なるコンテナにあると言っていますか? '@ H​​eaderParam'はどのように動作しますか? –

+0

'@ HeaderParam'は、HttpServletRequestではなくContainerRequestContextから取得されます。 ContainerRequestContextはHttpServletRequestから構築され、次にJerseyはHttpServletRequestではなくContainerRequestContextを処理に使用します –

関連する問題