2017-07-14 1 views
1

Disons que j'ai ce code:comment injecter des en-têtes dans un `@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"); 
    } 
} 

Je comptais appeler l'entrée de repos Point/test et récupérer la chaîne bar.

Mais tout ce que je vois est nul

Si je @HeaderParam("foo") je récupère correctement la variable, mais je dois accéder à la throug @Context HttpServletRequest.

Répondre

0

Pourquoi voudriez-vous attendre à ce que l'ajout d'en-têtes à la ContainerRequestContext serait également ajouter à la HttpServletRequest? Ce sont des entités complètement indépendantes. Essayez d'injecter HttpHeaders ou vous pouvez également injecter le ContainerRequestContext directement.

+0

vous dites que les en-têtes du contexte de la demande sont dans un autre conteneur que les en-têtes de la demande? Comment '@ HeaderParam' fonctionne ??? –

+0

'@ HeaderParam' est extrait du ContainerRequestContext, pas du HttpServletRequest. Le ContainerRequestContext est construit à partir de HttpServletRequest, puis Jersey utilise simplement ContainerRequestContext pour le traitement, pas le HttpServletRequest –