কেউ কি আমাকে বলতে পারেন যে আমি কীভাবে নিয়ামকের কাছ থেকে স্ট্রিং বার্তাটি ফিরে আসতে পারি?
আমি যদি এখনই একটি নিয়ামক পদ্ধতি থেকে একটি স্ট্রিং ফিরে পাই তবে স্প্রিং এমভিসি এটি jsp ভিউ নাম হিসাবে বিবেচনা করে।
কেউ কি আমাকে বলতে পারেন যে আমি কীভাবে নিয়ামকের কাছ থেকে স্ট্রিং বার্তাটি ফিরে আসতে পারি?
আমি যদি এখনই একটি নিয়ামক পদ্ধতি থেকে একটি স্ট্রিং ফিরে পাই তবে স্প্রিং এমভিসি এটি jsp ভিউ নাম হিসাবে বিবেচনা করে।
উত্তর:
কন্ট্রোলারে আপনার পদ্ধতিটি এটির সাথে এনেটেট করুন @ResponseBody:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
থেকে: 15.3.2.6 @ResponseBodyটীকা সহ প্রতিক্রিয়া বডি ম্যাপিং :
@ResponseBodyটীকা [...] একটি পদ্ধতি আরোপ করা যেতে পারে এবং নির্দেশ করে যে রিটার্ন টাইপ HTTP প্রতিক্রিয়া শরীর থেকে সোজা লিখতে হবে (এবং মডেল স্থাপন না, অথবা একটি দৃশ্য নাম হিসেবে ব্যাখ্যা)।
স্প্রিং 4 এর সাথে, যদি আপনার কন্ট্রোলারের @RestControllerপরিবর্তে এনেটেট করা হয় @Controller, আপনার এনেটেশন লাগবে না @ResponseBody।
কোড হবে
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
আপনি জাভাদোক এখানে পেতে পারেন@RestController
যদিও, @ টমাসজ একেবারেই ঠিক আছে অন্য উপায় আছে:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
তবে প্রথম পদ্ধতিটি পছন্দনীয়। আপনি যদি কাস্টম সামগ্রীর ধরণের সাথে প্রতিক্রিয়া ফিরিয়ে দিতে চান বা বাইনারি টাইপ (ফাইল ইত্যাদি) ফেরত চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন;
এটি যারা এই প্রশ্নটি পরে খুঁজে পেতে পারে তাদের জন্য এটি কেবল একটি নোট, তবে আপনাকে সামগ্রীর ধরণের পরিবর্তন করতে প্রতিক্রিয়াটি টানতে হবে না। এটি করতে এখানে নীচের উদাহরণ রয়েছে:
@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);
}
ব্যবহার Stringহিসাবে আউটপুট text/plainজন্য:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")