স্প্রিং এমভিসি 3 কন্ট্রোলার থেকে কেবল স্ট্রিং বার্তা ফেরান


95

কেউ কি আমাকে বলতে পারেন যে আমি কীভাবে নিয়ামকের কাছ থেকে স্ট্রিং বার্তাটি ফিরে আসতে পারি?

আমি যদি এখনই একটি নিয়ামক পদ্ধতি থেকে একটি স্ট্রিং ফিরে পাই তবে স্প্রিং এমভিসি এটি jsp ভিউ নাম হিসাবে বিবেচনা করে।

উত্তর:


194

কন্ট্রোলারে আপনার পদ্ধতিটি এটির সাথে এনেটেট করুন @ResponseBody:

@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
    return "Response!";
}

থেকে: 15.3.2.6 @ResponseBodyটীকা সহ প্রতিক্রিয়া বডি ম্যাপিং :

@ResponseBodyটীকা [...] একটি পদ্ধতি আরোপ করা যেতে পারে এবং নির্দেশ করে যে রিটার্ন টাইপ HTTP প্রতিক্রিয়া শরীর থেকে সোজা লিখতে হবে (এবং মডেল স্থাপন না, অথবা একটি দৃশ্য নাম হিসেবে ব্যাখ্যা)।


27
আরও পরিষ্কার করার জন্য, আমি উত্পাদিত = "পাঠ্য / প্লেইন @RequestMapping(value="/controller", method=GET, produces="text/plain")
ব্যবহারকারী 45432222

আসল উত্তরটি সর্বদা মন্তব্যে থাকে।
জোহানেস স্টাডলার

49

স্প্রিং 4 এর সাথে, যদি আপনার কন্ট্রোলারের @RestControllerপরিবর্তে এনেটেট করা হয় @Controller, আপনার এনেটেশন লাগবে না @ResponseBody

কোড হবে

@RestController
public class FooController {

   @RequestMapping(value="/controller", method=GET)
   public String foo() {
      return "Response!";
   }

}

আপনি জাভাদোক এখানে পেতে পারেন@RestController


ধন্যবাদ, এটি আমাকে স্ট্রিংয়ের পরিবর্তে কোনও ভিউ ফেরত দেওয়ার জন্য R @RestController এর পরিবর্তে \ @ নিয়ন্ত্রণকারী ব্যবহার করার প্রয়োজন তা নির্ধারণ করতে সহায়তা করে।
খ্রিস্টকোপার

@খ্রিস্কোপার এটি শুনে আনন্দিত :)
জিওন্ড এবং

18

যদিও, @ টমাসজ একেবারেই ঠিক আছে অন্য উপায় আছে:

@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
    try {       
        PrintWriter out = res.getWriter();
        out.println("Hello, world!");
        out.close();
    } catch (IOException ex) { 
        ...
    }
}

তবে প্রথম পদ্ধতিটি পছন্দনীয়। আপনি যদি কাস্টম সামগ্রীর ধরণের সাথে প্রতিক্রিয়া ফিরিয়ে দিতে চান বা বাইনারি টাইপ (ফাইল ইত্যাদি) ফেরত চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন;


কেবল একটি মাথা উপরে, তবে এর জন্য আপনাকে প্রতিক্রিয়াও টানতে হবে না।
স্কট

এর অর্থ দ্বিতীয় পয়েন্টের জন্য, একটি কাস্টম সামগ্রী প্রকার সেট করতে বা বাইনারি টাইপ ফিরিয়ে দেওয়ার বিষয়ে, আপনি এখনও সেই উপায়গুলির জন্য রেসপন্সএন্টিটি ব্যবহার করতে পারেন।
স্কট 21

6

এটি যারা এই প্রশ্নটি পরে খুঁজে পেতে পারে তাদের জন্য এটি কেবল একটি নোট, তবে আপনাকে সামগ্রীর ধরণের পরিবর্তন করতে প্রতিক্রিয়াটি টানতে হবে না। এটি করতে এখানে নীচের উদাহরণ রয়েছে:

@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);
}

3

কি সম্পর্কে:

PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;

এটা আমার জন্য খুব খারাপ।


3

ব্যবহার Stringহিসাবে আউটপুট text/plainজন্য:

@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
    return "bar";
}

4
এটি আমার পক্ষে কাজ করে না। আমাকে প্রতিক্রিয়া অবজেক্টটি পেতে এবং স্ট্রিং অবজেক্টটি ফেরত দেওয়ার আগে সামগ্রীর ধরণের স্পষ্ট করে সেট করতে হয়েছিল।
পেড্রো মাদ্রিদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.