2012-01-19 16 views
5

Jak mogę uzyskać HttpServletResponse object w metodzie mojego kontrolera sprężynowego , aby moja aplikacja była luźno powiązana z interfejsem API Http?Ustawianie typu zawartości odpowiedzi bez użycia HttpServletResponse

Dzięki ...

Edit: Właściwie to, co chcę jest ustawienie ContentType obiektu HttpServletResponse w moich controller.Does sprężyna zapewnia jakikolwiek sposób do tego bez uzyskiwania HttpServletResponse obiektu jako argumentu w metodzie kontrolera?

Odpowiedz

1

Po prostu przekaż go jako argument, np.

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

Ale to zwiąże mój kontroler http API których nie want.Please zobaczyć moje zmienił też. –

0

Myślę, że najlepszym sposobem radzenia sobie z tym jest użycie konkretnego View-Implementation, ponieważ tutaj do reagowania renderowania powinno nastąpić.

8

widzę dwie opcje:

Jeżeli typ zawartości, którą chcesz jest statyczny, a następnie można go dodać do @RequestMapping, na przykład

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

ta będzie działać tylko wtedy, gdy żądanie HTTP zawiera ten sam typ zawartości w swojej Accept nagłówka, choć. Zobacz 16.3.2.5 Producible Media Types. Można używać , np.

@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 ma również kilka popularnych typów MIME zdefiniowane jako stałe, np MediaType.TEXT_PLAIN.

Zobacz 16.3.3.6 Using HttpEntity<?>

+0

wiersz 'responseHeaders.setContentType (" text/plain "); 'w powyższym kodzie jest błąd:' setContentType (org.springframework.http.MediaType) w org.springframework.http.HttpHeaders nie można zastosować do (java.lang.String) '. Tak próbowałem: 'responseHeaders.setContentType (nowy MediaType (" text/plain "));' Ale to daje błąd: 'java.lang.IllegalArgumentException: Nieprawidłowy znak tokenu '/' w tokenie" text/plain "'. Jakieś sugestie? –

+0

@ Brightness: My bad. Zobacz edytowaną odpowiedź. – skaffman

+0

skaffman: Uruchomiłem twój edytowany kod, teraz daje błąd: '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) '. –

Powiązane problemy