¿Alguien puede decirme cómo puedo devolver un mensaje de cadena desde el controlador?
Si solo devuelvo una cadena de un método de controlador, spring mvc lo trata como un nombre de vista jsp.
¿Alguien puede decirme cómo puedo devolver un mensaje de cadena desde el controlador?
Si solo devuelvo una cadena de un método de controlador, spring mvc lo trata como un nombre de vista jsp.
Respuestas:
Anote su método en el controlador con @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
De: 15.3.2.6 Mapeo del cuerpo de la respuesta con la @ResponseBody
anotación :
La
@ResponseBody
anotación se puede [...] poner en un método e indica que el tipo de retorno debe escribirse directamente en el cuerpo de respuesta HTTP (y no colocarse en un modelo, ni interpretarse como un nombre de vista).
Con Spring 4, si su controlador está anotado con en @RestController
lugar de @Controller
, no necesita la @ResponseBody
anotación.
El código sería
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Puedes encontrar el Javadoc @RestController
aquí
Aunque @Tomasz tiene toda la razón, hay otra forma:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
pero es preferible el primer método. Puede utilizar este método si desea devolver una respuesta con un tipo de contenido personalizado o devolver un tipo binario (archivo, etc.);
Esta es solo una nota para aquellos que puedan encontrar esta pregunta más adelante, pero no es necesario que ingrese la respuesta para cambiar el tipo de contenido. Aquí hay un ejemplo a continuación para hacer precisamente eso:
@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 la salida 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")