Возврат только строкового сообщения из контроллера Spring MVC 3

Может кто-нибудь сказать мне, как я могу вернуть строковое сообщение от контроллера?

Если я просто возвращаю строку из метода контроллера, тогда Spring mvc рассматривает ее как имя представления jsp.

75 голосов | спросил user960567 6 +04002011-10-06T14:09:43+04:00312011bEurope/MoscowThu, 06 Oct 2011 14:09:43 +0400 2011, 14:09:43

5 ответов


0

Аннотируйте ваш метод в контроллере с помощью @ResponseBody:

@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
    return "Response!";
}

От: 15.3.2.6 Отображение тела ответа с помощью аннотации @ResponseBody :

  

Аннотацию @ResponseBody [...] можно поместить в метод и указать, что возвращаемый тип должен быть записан прямо в Тело HTTP-ответа (не помещается в модель или не интерпретируется как имя представления).

ответил Tomasz Nurkiewicz 6 +04002011-10-06T14:13:27+04:00312011bEurope/MoscowThu, 06 Oct 2011 14:13:27 +0400 2011, 14:13:27
0

В Spring 4, если ваш контроллер помечен @RestController вместо @Controller, вам не нужна аннотация @ResponseBody.

Код будет

@RestController
public class FooController {

   @RequestMapping(value="/controller", method=GET)
   public String foo() {
      return "Response!";
   }

}

Javadoc можно найти для @RestController здесь

ответил geoand 22 Maypm14 2014, 13:26:54
0

Хотя @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) { 
        ...
    }
}

но первый метод предпочтительнее. Вы можете использовать этот метод, если хотите вернуть ответ с пользовательским типом содержимого или вернуть двоичный тип (файл и т. Д.);

ответил danny.lesnik 6 +04002011-10-06T14:21:26+04:00312011bEurope/MoscowThu, 06 Oct 2011 14:21:26 +0400 2011, 14:21:26
0

Это просто примечание для тех, кто может найти этот вопрос позже, но вам не нужно тянуть в ответе, чтобы изменить тип контента. Вот пример ниже, чтобы сделать это:

@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);
}
ответил Scott 7 +04002011-10-07T00:49:37+04:00312011bEurope/MoscowFri, 07 Oct 2011 00:49:37 +0400 2011, 00:49:37
0

Для вывода String как text/plain Применение:

@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
    return "bar";
}
ответил MariuszS 13 Jpm1000000pmMon, 13 Jan 2014 18:36:03 +040014 2014, 18:36:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132