Qualcuno può dirmi come posso restituire un messaggio di stringa dal controller?
Se restituisco solo una stringa da un metodo controller, Spring mvc lo considera come un nome di visualizzazione jsp.
Qualcuno può dirmi come posso restituire un messaggio di stringa dal controller?
Se restituisco solo una stringa da un metodo controller, Spring mvc lo considera come un nome di visualizzazione jsp.
Risposte:
Annota il tuo metodo nel controller con @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
Da: 15.3.2.6 Mappatura del corpo della risposta con l' @ResponseBody
annotazione :
L'
@ResponseBody
annotazione può [...] essere inserita in un metodo e indica che il tipo restituito deve essere scritto direttamente nel corpo della risposta HTTP (e non inserito in un modello, o interpretato come un nome di visualizzazione).
Con Spring 4, se il tuo controller è annotato con @RestController
invece di @Controller
, non hai bisogno @ResponseBody
dell'annotazione.
Il codice sarebbe
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Puoi trovare Javadoc per @RestController
qui
Anche se @Tomasz ha assolutamente ragione, c'è un altro modo:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
ma il primo metodo è preferibile. È possibile utilizzare questo metodo se si desidera restituire una risposta con un tipo di contenuto personalizzato o restituire un tipo binario (file, ecc ...);
Questa è solo una nota per coloro che potrebbero trovare questa domanda in seguito, ma non è necessario inserire la risposta per modificare il tipo di contenuto. Ecco un esempio di seguito per fare proprio questo:
@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);
}
Per l'output String
come text/plain
uso:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")