Quelqu'un peut-il me dire comment je peux renvoyer un message sous forme de chaîne de caractères à partir d'un contrôleur ?
Si je renvoie une chaîne de caractères à partir d'une méthode de contrôleur, Spring Mvc la traitera comme un nom de vue jsp.
Quelqu'un peut-il me dire comment je peux renvoyer un message sous forme de chaîne de caractères à partir d'un contrôleur ?
Si je renvoie une chaîne de caractères à partir d'une méthode de contrôleur, Spring Mvc la traitera comme un nom de vue jsp.
Annotez votre méthode dans le contrôleur avec @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
De : 15.3.2.6 Mise en correspondance du corps de la réponse avec le format @ResponseBody
annotation :
En
@ResponseBody
peut être placée sur une méthode et indique que le type de retour doit être écrit directement dans le corps de la réponse HTTP (et non placé dans un modèle, ou interprété comme un nom de vue).
Avec Spring 4, si votre contrôleur est annoté avec @RestController
au lieu de @Controller
vous n'avez pas besoin de la @ResponseBody
annotation.
Le code serait le suivant
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Vous pouvez trouver la Javadoc pour @RestController
ici
Cependant, @Tomasz a tout à fait raison de dire qu'il y a une autre façon de procéder :
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
mais la première méthode est préférable. Vous pouvez utiliser cette méthode si vous souhaitez renvoyer une réponse avec un type de contenu personnalisé ou renvoyer un type binaire (fichier, etc...) ;
C'est juste une note pour ceux qui pourraient trouver cette question plus tard, mais vous n'avez pas besoin de tirer dans la réponse pour changer le type de contenu. Voici un exemple qui permet justement de le faire :
@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);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.