J'essaie d'atteindre les objectifs suivants.
Lisez un en-tête personnalisé et sa valeur dans Request:
name: username
Maintenant, en réponse, je voudrais retourner le même en-tête name:value
paire dans la réponse HTTP.
J'utilise l'implémentation Jersey 2.0 du service Web JAX-RS.
Lorsque j'envoie l'URL de la demande Http://localhost/test/
, les en-têtes de demande sont également transmis (pour le moment, bien que le plug-in Firefox - les coder en dur).
Lors de la réception de la demande pour cette URL, la méthode suivante est invoquée:
@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;
}
Comment puis-je y parvenir? Tout pointeur serait génial!
Injectez simplement un @Context HttpServletResponse response
comme argument de méthode. Changez les en-têtes à ce sujet
@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) {
response.setHeader("yourheadername", "yourheadervalue");
...
}
Je pense qu'en utilisant javax.ws.rs.core.Response
est plus élégant et fait partie de Jersey. Juste pour étendre la réponse précédente, voici un exemple simple:
@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;
}
Renvoie un Response
(une classe de JAX-RS) avec UserClass
comme entité. Sur Response
, vous pouvez définir des en-têtes HTTP.