Alguém pode me dizer como posso retornar uma mensagem de string do controlador?
Se eu apenas retornar uma string de um método de controlador, então spring mvc tratando-a como um nome de exibição jsp.
Alguém pode me dizer como posso retornar uma mensagem de string do controlador?
Se eu apenas retornar uma string de um método de controlador, então spring mvc tratando-a como um nome de exibição jsp.
Respostas:
Anote seu método no controlador com @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
De: 15.3.2.6 Mapeando o corpo da resposta com a @ResponseBody
anotação :
A
@ResponseBody
anotação pode ser colocada em um método e indica que o tipo de retorno deve ser escrito diretamente no corpo da resposta HTTP (e não colocado em um modelo ou interpretado como um nome de visão).
Com o Spring 4, se o seu controlador for anotado com em @RestController
vez de @Controller
, você não precisa da @ResponseBody
anotação.
O código seria
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Você pode encontrar o Javadoc para @RestController
aqui
Embora @Tomasz esteja absolutamente certo, há outra maneira:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
mas o primeiro método é preferível. Você pode usar este método se quiser retornar uma resposta com tipo de conteúdo personalizado ou tipo binário de retorno (arquivo, etc ...);
Esta é apenas uma nota para aqueles que podem encontrar esta pergunta mais tarde, mas você não precisa puxar a resposta para alterar o tipo de conteúdo. Aqui está um exemplo abaixo para fazer exatamente isso:
@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);
}
Para saída String
como text/plain
uso:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")