[스프링 - MVC] 메시지 바디에 직접 입력하여 응답하기

이전 글에서 정적 리소스와 뷰 템플릿을 통해 응답하는 방법을 살펴보았다. 이번 글에서는 HTTP 메시지 바디에 직접 데이터를 입력하여 응답하는 방법을 알아보도록 하겠다.




메시지 바디 응답

메시지 바디를 이용한 응답

import hello.springmvc.basic.HelloData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Slf4j
@Controller
public class ResponseBodyController {

	@GetMapping("/response-body-string-v1")
	public void responseBodyV1(HttpServletResponse response) throws IOException {
        response.getWriter().write("ok");
	}
	
	/**
	 * HttpEntity, ResponseEntity(Http Status 추가)
	 */
	@GetMapping("/response-body-string-v2")
	public ResponseEntity<String> responseBodyV2() {
		return new ResponseEntity<>("ok", HttpStatus.OK);
	}

	@ResponseBody
	@GetMapping("/response-body-string-v3")
	public String responseBodyV3() {
		return "ok";
	}

	@GetMapping("/response-body-json-v1")
	public ResponseEntity<HelloData> responseBodyJsonV1() {
		HelloData helloData = new HelloData();
		helloData.setUsername("userA");
		helloData.setAge(20);
		return new ResponseEntity<>(helloData, HttpStatus.OK);
	}

	@ResponseStatus(HttpStatus.OK)
	@ResponseBody
	@GetMapping("/response-body-json-v2")
	public HelloData responseBodyJsonV2() {
		HelloData helloData = new HelloData();
		helloData.setUsername("userA");
		helloData.setAge(20);
		return helloData;
	}

}

메서드 하나하나씩 설명하도록 하겠다.


responseBodyV1 메서드

  • response.getWriter().write("ok");
    • 서블릿을 직접 다룰 때처럼, HttpServletResponse 객체를 통해서 HTTP 메시지 바디에 직접 ok 응답 메시지를 전달한다.


responseBodyV2 메서드

  • return new ResponseEntity<>("ok", HttpStatus.OK);
    • ResponseEntity 객체를 통해 "ok" 라는 데이터를 응답 메시지 바디에 입력하고, OK 상태코드 를 입력한다.
    • 이렇게 입력된 객체를 생성한 뒤, 반환하여 응답한다.


responseBodyV3 메서드

  • @ResponseBody
    • 메서드에서 반환된 문자열이 응답 메시지 바디에 입력된다.


responseBodyJsonV1 메서드

  • return new ResponseEntity<>(helloData, HttpStatus.OK);
    • ResponseEntity 객체를 통해, 새로 생성한 객체 helloData 를 입력한다. (이렇게 자바 객체를 입력하면 JSON 형식으로 입력된다.)
    • helloData 가 JSON 형식으로 담긴 ResponseEntity 객체를 응답하는데 사용한다.


responseBodyJsonV2() 메서드

  • @ResponseBody
    • 메서드에서 반환된 자바 객체가 응답 메시지 바디에 JSON 형식으로 입력된다.



@ResponseBody

@ResponseBody 애너테이션은 메서드의 반환값을 직접 응답 메시지 바디에 입력하는 기능을 지원한다. 하지만, 각 메서드마다 사용하기가 번거롭다면 @RestController 를 사용하면 된다.


@RestController

  • 클래스 레벨에 적용하는 애너테이션이다.
  • @Controller@ResponseBody 를 포함하는 애너테이션이다.
  • 즉, 해당 클래스에 @Controller 를 적용하고, 모든 메서드에 @ResponseBody 를 적용시킨다.




  • 본 게시글은 김영한님의 강의를 토대로 정리한 글입니다.
  • 더 자세한 내용을 알고 싶으신 분들이 계신다면, 해당 강의를 수강하시는 것을 추천드립니다.