Установка типа содержимого ответа без использования HttpServletResponse - PullRequest
5 голосов
/ 19 января 2012

Как я могу получить HttpServletResponse object в методе моего контроллера пружины , чтобы мое приложение оставалось слабо связанным с Http API?

Спасибо ...

Редактировать: На самом деле я хочу установить ContentType объекта HttpServletResponse в моем контроллере. Spring предоставляет любой способ для этого, не получая объект HttpServletResponse в качестве аргумента в методе контроллера?

Ответы [ 3 ]

8 голосов
/ 20 января 2012

Я вижу два варианта:

Если тип содержимого, который вы хотите, является статическим, то вы можете добавить его к @RequestMapping, например,

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

Это будет работать толькоесли HTTP-запрос содержит тот же тип содержимого в своем заголовке Accept.См. 16.3.2.5 Типы производимых носителей .

В качестве альтернативы используйте ResponseEntity, например,

@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 также имеет несколько общих типов пантомимы, определенных какконстанты, например MediaType.TEXT_PLAIN.

См. 16.3.3.6 Использование HttpEntity<?>

1 голос
/ 19 января 2012

Просто передайте его в качестве аргумента, например

@RequestMapping( value="/test", method = RequestMethod.GET )
public void test( HttpServletResponse response ) { ... }
0 голосов
/ 20 января 2012

Я думаю, что лучший способ справиться с этим - использовать конкретную View-реализацию , так как здесь должен выполняться ответ-рендеринг.

...