Может ли кто-нибудь сказать мне, как я могу вернуть строковое сообщение с контроллера?
Если я просто верну строку из метода контроллера, тогда spring mvc рассматривает ее как имя представления jsp.
Может ли кто-нибудь сказать мне, как я могу вернуть строковое сообщение с контроллера?
Если я просто верну строку из метода контроллера, тогда spring 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);
}
Как насчет:
PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;
Это копает для меня.
Для вывода String
в качестве text/plain
используйте:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}