Retourner Seulement le message de chaîne de caractères du contrôleur MVC 3 de printemps
est-ce que quelqu'un peut me dire comment je peux retourner le message de chaîne de caractères du contrôleur?
si je renvoie juste une chaîne de caractères d'une méthode de controller alors que mvc le traite comme un nom de vue jsp.
6 réponses
annoter 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 la Cartographie du corps de la réponse avec le @ResponseBody
annotation :
Le
@ResponseBody
annotation [...] peut être mis sur une méthode et indique que le type de retour doit être écrit directement dans le corps de réponse HTTP (et non placé dans un Model, 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'annotation @ResponseBody
.
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 y a 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 voulez retourner la réponse avec le type de contenu personnalisé ou le type binaire de retour (fichier, etc...);
ce n'est qu'une note pour ceux qui pourraient trouver cette question plus tard, mais vous n'avez pas à tirer dans la réponse pour changer le type de contenu. Voici un exemple ci-dessous pour 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);
}
Ce sujet:
PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;
ça me fait mal.
Pour outputing String
comme text/plain
utiliser:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}