2013-07-26 17 views
22

Sto cercando di ottenere quanto segue.Intestazione risposta personalizzata Jersey/Java

Leggi un'intestazione personalizzata e il suo valore da Richiesta:

name: username 

Ora, in risposta, vorrei restituire la stessa intestazione name:value coppia in risposta HTTP.

Sto utilizzando l'implementazione di JAX-RS webservice di Jersey 2.0.

Quando invio l'URL di richiesta Http://localhost/test/, vengono inoltrate anche le intestazioni di richiesta (per il momento, sebbene il plug-in per Firefox - le codifica in modo fisso).

Al ricevimento della richiesta di questo URL, il seguente metodo viene invocato:

@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; 
} 

Come posso raggiungere questo obiettivo? Qualsiasi suggerimento sarebbe grandioso!

risposta

30

Basta iniettare un @Context HttpServletResponse response come argomento del metodo. Modificare le intestazioni su quel

@Produces(MediaType.APPLICATION_JSON) 
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) { 
    response.setHeader("yourheadername", "yourheadervalue"); 
    ... 
} 
+1

Richiede l'aggiunta di ulteriori librerie? dice la classe non identificata "HttpServletResponse". – Namenoobie

+0

@Namenoobie È necessaria la libreria di runtime del server. Questo è fondamentalmente l'api servlet. Se sei su Eclipse, vai al tuo progetto java buildpath e aggiungi libreria. –

+0

Quando seguo le istruzioni, ottengo il server Tomcat che esiste già sul mio computer locale. – Namenoobie

2

Restituire un Response (una classe da JAX-RS) con UserClass come entità. Su Response è possibile impostare intestazioni HTTP.

+2

Mi dispiace, non seguo. potresti elaborare? – Namenoobie

44

Penso che utilizzando javax.ws.rs.core.Response è più elegante ed è una parte di Jersey. Solo per estendere la risposta precedente, ecco un semplice esempio:

@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; 
    } 
+4

Questa dovrebbe essere la risposta selezionata. – reinaldoluckman

+5

per rendere ancora più semplice sostituire '.status (200) .entity' con' .ok'. –

+0

Ciò potrebbe causare problemi con la generazione automatica della documentazione API utilizzando [swegger codegen] (https://github.com/swagger-api/swagger-codegen). – koppor

Problemi correlati