Bất kỳ ai có thể cho tôi biết làm thế nào tôi có thể trả lại tin nhắn chuỗi từ bộ điều khiển?
Nếu tôi chỉ trả về một chuỗi từ phương thức bộ điều khiển thì spring mvc coi nó như một tên chế độ xem jsp.
Bất kỳ ai có thể cho tôi biết làm thế nào tôi có thể trả lại tin nhắn chuỗi từ bộ điều khiển?
Nếu tôi chỉ trả về một chuỗi từ phương thức bộ điều khiển thì spring mvc coi nó như một tên chế độ xem jsp.
Câu trả lời:
Chú thích phương pháp của bạn trong bộ điều khiển với @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
Từ: 15.3.2.6 Ánh xạ nội dung phản hồi với @ResponseBody
chú thích :
Các
@ResponseBody
chú thích [...] có thể được đặt trên một phương pháp và chỉ ra rằng kiểu trả về phải được ghi thẳng vào cơ thể phản ứng HTTP (và không được đặt trong một mô hình, hoặc hiểu là một tên xem).
Với Spring 4, nếu Bộ điều khiển của bạn được chú thích @RestController
thay vì @Controller
, bạn không cần @ResponseBody
chú thích.
Mã sẽ là
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Bạn có thể tìm thấy Javadoc @RestController
tại đây
Mặc dù, @Tomasz hoàn toàn đúng, có một cách khác:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
nhưng phương pháp đầu tiên là thích hợp hơn. Bạn có thể sử dụng phương pháp này nếu bạn muốn trả về phản hồi với kiểu nội dung tùy chỉnh hoặc trả về kiểu nhị phân (tệp, v.v.);
Đây chỉ là một lưu ý cho những người có thể tìm thấy câu hỏi này sau này, nhưng bạn không cần phải kéo câu trả lời để thay đổi loại nội dung. Đây là một ví dụ bên dưới để làm điều đó:
@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);
}
Để đi ra ngoài String
như text/plain
sử dụng:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")