sirve requestmapping que para mvc modelandview formulario español ejemplo java spring spring-mvc

java - requestmapping - spring mvc español



Devolver solo el mensaje de cadena del controlador Spring MVC 3 (6)

¿Alguien puede decirme cómo puedo devolver un mensaje de cadena desde el controlador?

Si acabo de devolver una cadena desde un método de controlador, entonces mvc spring lo trata como un nombre de vista jsp.


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 el primer método es preferible. Puede usar este método si desea devolver una respuesta con un tipo de contenido personalizado o devolver un tipo binario (archivo, etc.);


Con Spring 4, si su controlador está anotado con @RestController lugar de @Controller , no necesita la anotación @ResponseBody .

El código sería

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

Puede encontrar el Javadoc para @RestController here


Esta es solo una nota para quienes puedan encontrar esta pregunta más adelante, pero no es necesario que extraiga la respuesta para cambiar el tipo de contenido. Aquí hay un ejemplo a continuación para hacer justamente 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 de String como text/plain uso text/plain :

@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain") @ResponseBody public String foo() { return "bar"; }


Qué pasa:

PrintWriter out = response.getWriter(); out.println("THE_STRING_TO_SEND_AS_RESPONSE"); return null;

Esto funciona para mí.


Anota tu método en el controlador con @ResponseBody :

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

De: 15.3.2.6 Asignación del cuerpo de la respuesta con la anotación @ResponseBody :

La anotación @ResponseBody [...] se puede poner en un método e indica que el tipo de devolución debe escribirse directamente en el cuerpo de respuesta HTTP (y no colocarse en un Modelo o interpretarse como un nombre de vista).