क्या कोई मुझे बता सकता है कि मैं नियंत्रक से स्ट्रिंग संदेश कैसे वापस कर सकता हूं?
अगर मैं सिर्फ एक नियंत्रक विधि से एक स्ट्रिंग लौटाता हूं तो स्प्रिंग mvc इसे एक jsp दृश्य नाम के रूप में मानता है।
क्या कोई मुझे बता सकता है कि मैं नियंत्रक से स्ट्रिंग संदेश कैसे वापस कर सकता हूं?
अगर मैं सिर्फ एक नियंत्रक विधि से एक स्ट्रिंग लौटाता हूं तो स्प्रिंग mvc इसे एक 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")