स्प्रिंग MVC 3 नियंत्रक से केवल स्ट्रिंग संदेश लौटें


94

क्या कोई मुझे बता सकता है कि मैं नियंत्रक से स्ट्रिंग संदेश कैसे वापस कर सकता हूं?

अगर मैं सिर्फ एक नियंत्रक विधि से एक स्ट्रिंग लौटाता हूं तो स्प्रिंग mvc इसे एक jsp दृश्य नाम के रूप में मानता है।

जवाबों:


192

नियंत्रक में अपनी विधि का उल्लेख करें @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")
user454322

असली जवाब हमेशा टिप्पणियों में होता है।
जोहान्स स्टैडलर

49

स्प्रिंग 4 के साथ, यदि आपके नियंत्रक के @RestControllerबजाय के साथ एनोटेट किया गया है @Controller, तो आपको @ResponseBodyएनोटेशन की आवश्यकता नहीं है ।

कोड होगा

@RestController
public class FooController {

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

}

आप यहां के लिए जावदोक पा सकते हैं@RestController


धन्यवाद, इससे मुझे यह पता लगाने में मदद मिली कि मुझे एक स्ट्रिंग के बजाय एक दृश्य वापस करने के लिए \ @RestController के बजाय \ @ कंट्रोलर का उपयोग करने की आवश्यकता है।
khriskooper

@khriskooper यह सुनकर खुश हुए :)
geoand

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) { 
        ...
    }
}

लेकिन पहली विधि बेहतर है। यदि आप कस्टम सामग्री प्रकार के साथ प्रतिक्रिया देना चाहते हैं या बाइनरी प्रकार (फ़ाइल, आदि ...) वापस करना चाहते हैं तो आप इस विधि का उपयोग कर सकते हैं;


बस एक सिर ऊपर है, लेकिन आपको इसके लिए प्रतिक्रिया खींचने की भी आवश्यकता नहीं है।
स्कॉट

मतलब है कि दूसरे बिंदु के लिए, एक कस्टम सामग्री प्रकार सेट करने या बाइनरी प्रकार को वापस करने की आवश्यकता के बारे में, आप अभी भी उन साधनों के लिए ResponseEntity का उपयोग कर सकते हैं।
स्कॉट

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";
}

1
यह मेरे लिए काम नहीं किया। मुझे प्रतिक्रिया ऑब्जेक्ट प्राप्त करना था और स्ट्रिंग ऑब्जेक्ट को वापस करने से पहले सामग्री प्रकार स्पष्ट रूप से सेट करना था।
पेड्रो मैड्रिड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.