2012-01-19 9 views
5

Come posso ottenere HttpServletResponse object in un metodo nel mio controller di primavera in modo che la mia applicazione rimanga liberamente accoppiata con l'API Http?Impostazione del tipo di contenuto della risposta senza utilizzare HttpServletResponse

Grazie ...

Edit: In realtà quello che voglio è quello di impostare il ContentType dell'oggetto HttpServletResponse nei miei controller.Does primavera fornisce alcun modo per questo senza ottenere HttpServletResponse oggetto come argomento nel metodo del controller?

risposta

1

Basta passarlo come argomento, ad es.

@RequestMapping(value="/test", method = RequestMethod.GET) 
public void test(HttpServletResponse response) { ... } 
+0

Ma questo si legheranno mio controller per HTTP API, che io non vedo want.Please mia modifica anche. –

0

Penso che il modo migliore per gestire questa situazione è di usare una specifica View-Implementation, dal momento che qui alla risposta rendering dovrebbe avvenire.

8

posso vedere due opzioni:

Se il tipo di contenuto che si desidera è statica, quindi è possibile aggiungerlo al @RequestMapping, per esempio

@RequestMapping(value="...", produces="text/plain") 

Questo funziona solo se la richiesta HTTP contiene lo stesso tipo di contenuto nella sua Accept intestazione, però. Vedi 16.3.2.5 Producible Media Types.

In alternativa, utilizzare ResponseEntity, ad es.

@RequestMapping("/something") 
public ResponseEntity<String> handle() { 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.setContentType(new MediaType("text", "plain")); 
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED); 
} 

MediaType ha anche una manciata di tipi MIME comuni definiti come costanti, ad esempio MediaType.TEXT_PLAIN.

Vedi 16.3.3.6 Using HttpEntity<?>

+0

la riga 'responseHeaders.setContentType (" text/plain "); 'nel codice sopra dà errore:' setContentType (org.springframework.http.MediaType) in org.springframework.http.HttpHeaders non può essere applicato a (java.lang.String) '. Così ho provato: 'responseHeaders.setContentType (new MediaType (" text/plain "));' Ma ciò dà errore: 'java.lang.IllegalArgumentException: carattere token non valido '/' in token" text/plain "'. Qualche suggerimento? –

+0

@brightness: il mio male. Vedi la risposta modificata. – skaffman

+0

skaffman: Ho eseguito il codice modificato, ora sta dando un errore: 'java.lang.NoSuchMethodError: org.springframework.http.HttpHeaders.readOnlyHttpHeaders (Lorg/springframework/http/HttpHeaders;) Lorg/springframework/http/HttpHeaders; \t org.springframework.http.HttpEntity. (HttpEntity.java:100) \t org.springframework.http.HttpEntity. (HttpEntity.java:70) \t org.springframework.http.HttpEntity. (HttpEntity.java:58) '. –

Problemi correlati