Czy ktoś może mi powiedzieć, jak mogę zwrócić wiadomość tekstową z kontrolera?
Jeśli po prostu zwrócę ciąg z metody kontrolera, to spring mvc traktuje go jako nazwę widoku jsp.
java
spring
spring-mvc
user960567
źródło
źródło
@RequestMapping(value="/controller", method=GET, produces="text/plain")
W Spring 4, jeśli twój kontroler jest oznaczony
@RestController
zamiast@Controller
, nie potrzebujesz@ResponseBody
adnotacji.Kod byłby
@RestController public class FooController { @RequestMapping(value="/controller", method=GET) public String foo() { return "Response!"; } }
Dokument Javadoc można znaleźć
@RestController
tutajźródło
Chociaż @Tomasz ma całkowitą rację, jest inny sposób:
@RequestMapping(value="/controller", method=GET) public void foo(HttpServletResponse res) { try { PrintWriter out = res.getWriter(); out.println("Hello, world!"); out.close(); } catch (IOException ex) { ... } }
ale pierwsza metoda jest lepsza. Możesz użyć tej metody, jeśli chcesz zwrócić odpowiedź z niestandardowym typem zawartości lub zwrócić typ binarny (plik itp.);
źródło
To tylko uwaga dla tych, którzy mogą później znaleźć to pytanie, ale nie musisz wyciągać odpowiedzi, aby zmienić typ treści. Oto przykład poniżej, aby to zrobić:
@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); }
źródło
Co powiesz na:
PrintWriter out = response.getWriter(); out.println("THE_STRING_TO_SEND_AS_RESPONSE"); return null;
To mi odpowiada.
źródło
Do wyprowadzania
String
jakotext/plain
użycia:@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain") @ResponseBody public String foo() { return "bar"; }
źródło