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


93

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

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

답변:


191

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

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

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

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


27
그것은 분명, 내가 추가 할 수 있도록하려면 = "텍스트 / 일반 생산 @RequestMapping(value="/controller", method=GET, produces="text/plain")
user454322에게

진짜 답은 항상 댓글에 있습니다.
Johannes Stadler

48

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

코드는

@RestController
public class FooController {

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

}

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


감사합니다. 이것은 내가 String이 아닌 뷰를 반환하기 위해 \ @RestController 대신 \ @Controller를 사용해야한다는 것을 알아내는 데 도움이되었습니다.
khriskooper

@khriskooper 그것을 듣고 기쁩니다 :)
geoand aug

18

@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) { 
        ...
    }
}

그러나 첫 번째 방법이 바람직합니다. 사용자 정의 콘텐츠 유형으로 응답을 반환하거나 바이너리 유형 (파일 등 ...)을 반환하려는 경우이 메서드를 사용할 수 있습니다.


주의 할 점이 있지만 이에 대해 응답을 가져올 필요도 없습니다.
스콧

두 번째 요점은 사용자 지정 콘텐츠 유형을 설정해야하거나 이진 유형을 반환해야하는 경우에도 해당 수단으로 ResponseEntity를 사용할 수 있습니다.
스콧

6

이것은 나중에이 질문을 찾을 수있는 사람들을위한 메모 일 뿐이지 만 콘텐츠 유형을 변경하기 위해 응답을 가져올 필요는 없습니다. 다음은이를 수행하는 예입니다.

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

3

이건 어떤가요:

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

이것은 나를 위해 woks.


3

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

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

1
이것은 나를 위해 작동하지 않았습니다. String 개체를 반환하기 전에 응답 개체를 가져 와서 콘텐츠 형식을 명시 적으로 설정해야했습니다.
Pedro Madrid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.