[java] Spring MVC 3 컨트롤러에서 문자열 메시지 만 반환

컨트롤러에서 문자열 메시지를 반환하는 방법을 알려주는 사람이 있습니까?

컨트롤러 메서드에서 문자열을 반환하면 mvc를 jsp 뷰 이름으로 취급합니다.



답변

컨트롤러에서 메소드에 다음과 @ResponseBody같이 주석을 추가하십시오 .

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

From : 15.3.2.6 @ResponseBody주석을 사용 하여 응답 본문 매핑 :

@ResponseBody주석은 […]하는 방법에 넣어 반환 형식은 HTTP 응답 본체에 바로 기록 (과 뷰 이름으로 모델에 배치하거나 해석하지 않음)해야 함을 나타냅니다 할 수있다.


답변

Spring 4에서는 Controller가 @RestController대신 주석이 달린 경우 주석이 @Controller필요하지 않습니다 @ResponseBody.

코드는

@RestController
public class FooController {

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

}

여기에 대한 Javadoc을 찾을 수 있습니다.@RestController


답변

@Tomasz가 절대적으로 맞지만 다른 방법이 있습니다.

@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);
}


답변

이건 어떤가요:

PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;

이것은 나를 위해 woks.


답변

사용으로 출력 String하는 text/plain경우 :

@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
    return "bar";
}


답변