Adakah yang bisa memberi tahu saya bagaimana saya bisa mengembalikan pesan string dari pengontrol?
Jika saya hanya mengembalikan string dari metode pengontrol maka pegas MVC memperlakukannya sebagai nama tampilan jsp.
Adakah yang bisa memberi tahu saya bagaimana saya bisa mengembalikan pesan string dari pengontrol?
Jika saya hanya mengembalikan string dari metode pengontrol maka pegas MVC memperlakukannya sebagai nama tampilan jsp.
Jawaban:
Membubuhi keterangan metode Anda di controller dengan @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
Dari: 15.3.2.6 Memetakan isi tanggapan dengan @ResponseBody
anotasi :
The
@ResponseBody
penjelasan [...] dapat diletakkan pada metode dan menunjukkan bahwa tipe kembali harus ditulis langsung ke tubuh respon HTTP (dan tidak ditempatkan dalam Model, atau ditafsirkan sebagai nama tampilan).
Dengan Spring 4, jika Pengontrol Anda diberi anotasi, @RestController
bukan @Controller
, Anda tidak memerlukan @ResponseBody
anotasi tersebut.
Kodenya adalah
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Anda dapat menemukan Javadoc @RestController
di sini
Meskipun, @Tomasz benar, ada cara lain:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
tetapi metode pertama lebih disukai. Anda dapat menggunakan metode ini jika Anda ingin mengembalikan respons dengan tipe konten kustom atau mengembalikan tipe biner (file, dll ...);
Ini hanya catatan bagi mereka yang mungkin menemukan pertanyaan ini nanti, tetapi Anda tidak perlu menarik respons untuk mengubah jenis konten. Berikut adalah contoh di bawah ini untuk melakukannya:
@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);
}
Untuk keluaran String
sebagai text/plain
digunakan:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")