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 @ResponseBodyek açıklama ile eşlenmesi :
@ResponseBodyAçı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 @RestControlleryerine ile açıklama yapılmışsa, açıklamaya @Controllerihtiyacı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 Stringolarak text/plainkullanı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")