2014-11-12 1 views
7

ho questo:Come posso aggiungere intestazioni a una risposta da scintilla, quando si utilizza un trasformatore

get ("/test", (req, resp) -> { 
    return repository.getAll(); 
}, new JsonTransformer()); 

mio trasformatore assomiglia:

public class JsonTransformer implements ResponseTransformer { 

    ObjectMapper om = new ObjectMapper(); 

    public JsonTransformer() { 
    } 

    @Override 
    public String render(Object o) throws Exception { 
     return om.writeValueAsString(o); 
    } 
} 

Ho provato ad aggiungere un colpo di testa utilizzando la intestazione funtion sulla risposta in questo modo:

get ("/test", (req, resp) -> { 
    resp.header("Content-Type", "application/json"); 
    return repository.getAll(); 
}, new JsonTransformer()); 

e ho provato questo che ho trovato nella documentazione: Penso thi s imposta il accetta di tipo

get ("/test", "application/json", (req, resp) -> { 
    return repository.getAll(); 
}, new JsonTransformer()); 

Ma da nessuna parte sto ottenendo application/json come il mio Content-Type intestazione

+0

vorrei pensare di cambiare il tag scintilla. Questo sembra essere per il quadro di calcolo della scintilla apache, non per il framework ws. – grinch

+0

aah grazie farà – albertjan

+0

Come l'hai risolto? Ho aggiunto "response.type (" application/json ");" Funziona, ma c'è un modo più bello? – Gabriel

risposta

6

si imposta il Content-Type della risposta utilizzando la funzione di response.type in questo modo:

get("test", (req, resp) -> { 
    resp.type("application/json"); 
    return repository.getAll() 
}, new JsonTransformer()); 
15

Bene dopo aver cercato ho trovato un modo elegante per risolvere questo problema, ho creato un metodo precedente.

before((request, response) -> response.type("application/json")); 

Ciò aggiungerebbe il tipo di risposta a json.

È possibile aggiungerlo dopo il percorso, ma in seguito potrebbe risultare problematico. thx albertjan per il vostro suggerimento :)

+1

Se json è il tuo tipo di risposta principale, la prima route è una buona soluzione. Il dopo percorso potrebbe diventare problematico in seguito. – albertjan

+0

Grazie per la tua risposta, ho provato entrambi, ma ho finito per usare prima perché era più pulito e ho ancora la possibilità di cambiare il response.type nella rotta stessa, se necessario. – Gabriel