Quelqu'un peut-il me dire comment je peux retourner un message de chaîne depuis le contrôleur?
Si je viens de retourner une chaîne à partir d'une méthode de contrôleur puis ressort MVC le traitant 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 Mappage du corps de la réponse avec le @ResponseBody
annotation :
Le
@ResponseBody
annotation [...] peut être placé 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, ni 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 du @ResponseBody
annotation.
Le code serait
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Vous pouvez trouver le Javadoc pour @RestController
ici
Bien que @Tomasz ait absolument raison, il existe un autre moyen:
@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 un type binaire (fichier, etc.).
Ceci est juste une note pour ceux qui pourraient trouver cette question plus tard, mais vous n’avez pas besoin de saisir la réponse pour changer le type de contenu. Voici un exemple ci-dessous pour faire exactement cela:
@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);
}
Qu'en est-il de:
PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;
Cela me convient.
Pour sortir String
comme text/plain
utilisation:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}