Quelqu'un peut-il me dire comment je peux retourner un message de chaîne du contrôleur?
Si je retourne juste une chaîne à partir d'une méthode de contrôleur, alors spring mvc la traite comme un nom de vue jsp.
Quelqu'un peut-il me dire comment je peux retourner un message de chaîne du contrôleur?
Si je retourne juste une chaîne à partir d'une méthode de contrôleur, alors spring mvc la traite comme un nom de vue jsp.
Réponses:
Annotez votre méthode dans le contrôleur avec @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
From: 15.3.2.6 Mappage du corps de la réponse avec l' @ResponseBody
annotation :
L'
@ResponseBody
annotation [...] 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 l' @ResponseBody
annotation.
Le code serait
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Vous pouvez trouver le Javadoc @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 renvoyer un type binaire (fichier, etc ...);
Ceci est juste une note pour ceux qui pourraient trouver cette question plus tard, mais vous n'avez pas à extraire 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);
}
Pour la sortie String
comme text/plain
utilisation:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")