Хто-небудь може сказати мені, як я можу повернути рядок повідомлення від контролера?
Якщо я просто повертаю рядок з методу контролера, тоді mvc сприймає його як ім'я подання jsp.
Хто-небудь може сказати мені, як я можу повернути рядок повідомлення від контролера?
Якщо я просто повертаю рядок з методу контролера, тоді mvc сприймає його як ім'я подання jsp.
Відповіді:
Анотуйте свій метод у контролері за допомогою @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
З: 15.3.2.6 Складання тексту відповіді з @ResponseBody
анотацією :
@ResponseBody
Анотацію [...] може бути поставлений на метод і вказує на те, що тип повертається значення має бути записаний прямо в тіло відповіді HTTP (і не поміщається в одній моделі, або інтерпретується як ім'я виду).
З Spring 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);
}
Для виведення String
як text/plain
використання:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")