Herhangi biri bana denetleyiciden dize mesajını nasıl döndürebileceğimi söyleyebilir mi?
Bir denetleyici yönteminden bir dize döndürürsem, bahar mvc onu bir jsp görünüm adı olarak ele alır.
Herhangi biri bana denetleyiciden dize mesajını nasıl döndürebileceğimi söyleyebilir mi?
Bir denetleyici yönteminden bir dize döndürürsem, bahar mvc onu bir jsp görünüm adı olarak ele alır.
Yanıtlar:
Yönteminize şu şekilde açıklama ekleyin @ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
Kimden: 15.3.2.6 Yanıt gövdesinin @ResponseBody
ek açıklama ile eşlenmesi :
@ResponseBody
Açıklama [...] bir yöntem koymak ve geri tip bir HTTP yanıtı gövdesine düz yazılmış (ve bir görünüm adı olarak bir model içine yerleştirilebilir veya yorumlanmaz) olması gerektiğini gösterir edilebilir.
Yay 4 ile, Denetleyiciniz @RestController
yerine ile açıklama yapılmışsa, açıklamaya @Controller
ihtiyacınız yoktur @ResponseBody
.
Kod olurdu
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
Javadoc'u burada bulabilirsiniz@RestController
@Tomasz kesinlikle haklı olsa da başka bir yolu daha var:
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
ancak ilk yöntem tercih edilir. Bu yöntemi, özel içerik türüyle yanıt döndürmek veya ikili tür (dosya, vb ...) döndürmek istiyorsanız kullanabilirsiniz;
Bu, bu soruyu daha sonra bulabilecek olanlar için sadece bir not, ancak içerik türünü değiştirmek için yanıtı çekmeniz gerekmiyor. İşte tam da bunu yapmak için bir örnek:
@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);
}
Çıkış olanağı için String
olarak text/plain
kullanılmak:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
En basit çözüm:
Sadece alıntı ekleyin, yanıt türü application / json olarak tanımlandığında neden Spring boot tarafından otomatik olarak uygulanmadığını gerçekten bilmiyorum, ama harika çalışıyor.
@PostMapping("/create")
public String foo()
{
String result = "something"
return "\"" + result + "\"";
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")