web-dev-qa-db-fra.com

En-tête de réponse personnalisé Jersey / Java

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!

27
Namenoobie

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");
    ...
}
36

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;
    }
49
Alex P

Renvoie un Response (une classe de JAX-RS) avec UserClass comme entité. Sur Response, vous pouvez définir des en-têtes HTTP.

2
user1907906