6 ответов:
аннотировать свой метод в контроллере с
@ResponseBody:@RequestMapping(value="/controller", method=GET) @ResponseBody public String foo() { return "Response!"; }от: 15.3.2.6 сопоставление тела ответа с
@ResponseBodyаннотации:The
@ResponseBodyзаметка [...] может быть помещен в метод и указывает, что возвращаемый тип должен быть записан прямо в тело ответа HTTP (а не помещен в модель или интерпретирован как имя представления).
С пружиной 4, Если ваш контроллер помечается
@RestControllerвместо@Controller, вам не нужно@ResponseBodyПримечание.код будет
@RestController public class FooController { @RequestMapping(value="/controller", method=GET) public String foo() { return "Response!"; } }вы можете найти Javadoc для
@RestControllerздесь
хотя, @Tomasz абсолютно прав есть и другой способ:
@RequestMapping(value="/controller", method=GET) public void foo(HttpServletResponse res) { try { PrintWriter out = res.getWriter(); out.println("Hello, world!"); out.close(); } catch (IOException ex) { ... } }но первый способ предпочтительнее. Вы можете использовать этот метод, если хотите вернуть ответ с пользовательским типом контента или возвращать двоичный тип (файл и т. д...);
Это просто примечание для тех, кто может найти этот вопрос позже, но вам не нужно тянуть в ответ, чтобы изменить тип контента. Вот пример ниже, чтобы сделать это:
@RequestMapping(method = RequestMethod.GET, value="/controller") public ResponseEntity<byte[]> displayUploadedFile() { HttpHeaders headers = new HttpHeaders(); String disposition = INLINE; String fileName = ""; headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //Load your attachment here if (Arrays.equals(Constants.HEADER_BYTES_PDF, contentBytes)) { headers.setContentType(MediaType.valueOf("application/pdf")); fileName += ".pdf"; } if (Arrays.equals(Constants.HEADER_BYTES_TIFF_BIG_ENDIAN, contentBytes) || Arrays.equals(Constantsr.HEADER_BYTES_TIFF_LITTLE_ENDIAN, contentBytes)) { headers.setContentType(MediaType.valueOf("image/tiff")); fileName += ".tif"; } if (Arrays.equals(Constants.HEADER_BYTES_JPEG, contentBytes)) { headers.setContentType(MediaType.IMAGE_JPEG); fileName += ".jpg"; } //Handle other types if necessary headers.add("Content-Disposition", , disposition + ";filename=" + fileName); return new ResponseEntity<byte[]>(uploadedBytes, headers, HttpStatus.OK); }
о:
PrintWriter out = response.getWriter(); out.println("THE_STRING_TO_SEND_AS_RESPONSE"); return null;это работает для меня.
для outputing
Stringкакtext/plainиспользование:@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain") @ResponseBody public String foo() { return "bar"; }
Comments