Kann mir jemand sagen, wie ich eine String-Nachricht vom Controller zurückgeben kann?
Wenn ich nur einen String von einer Controller-Methode zurückgebe, dann behandelt spring mvc ihn als jsp-Ansichtsnamen.
Kann mir jemand sagen, wie ich eine String-Nachricht vom Controller zurückgeben kann?
Wenn ich nur einen String von einer Controller-Methode zurückgebe, dann behandelt spring mvc ihn als jsp-Ansichtsnamen.
Antworten:
Kommentieren Sie Ihre Methode im Controller mit @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
Von: 15.3.2.6 Zuordnen des Antwortkörpers mit der @ResponseBody
Anmerkung :
Die
@ResponseBody
Anmerkung [...] kann in eine Methode eingefügt werden und gibt an, dass der Rückgabetyp direkt in den HTTP-Antworttext geschrieben (und nicht in ein Modell eingefügt oder als Ansichtsname interpretiert werden soll).
In Spring 4 benötigen Sie die Anmerkung nicht , wenn Ihr Controller mit @RestController
statt kommentiert ist .@Controller
@ResponseBody
Der Code wäre
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Den Javadoc finden Sie @RestController
hier
Obwohl @Tomasz absolut richtig ist, gibt es einen anderen Weg:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
Die erste Methode ist jedoch vorzuziehen. Sie können diese Methode verwenden, wenn Sie eine Antwort mit einem benutzerdefinierten Inhaltstyp oder einen Binärtyp (Datei usw.) zurückgeben möchten.
Dies ist nur ein Hinweis für diejenigen, die diese Frage möglicherweise später finden, aber Sie müssen die Antwort nicht abrufen, um den Inhaltstyp zu ändern. Hier ist ein Beispiel, um genau das zu tun:
@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);
}
Zur Ausgabe String
als text/plain
Verwendung:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")