본문 바로가기
Develop/Spring

[Spring Web MVC] Handler Methods - Return Values

by 준팍(junpak) 2023. 4. 17.

Return Values

  • String
    • 뷰 이름을 나타내는 문자열을 반환하면, 스프링 웹 MVC는 뷰 리졸버(ViewResolver)를 사용하여 해당 뷰를 찾아 렌더링한 후 클라이언트에게 전달한다.
    • 뷰 템플릿 기본 경로
      • src/main/resources/templates
  • @ResponseBody
    • 메서드에 사용되며, 반환 값이 HttpMessageConverter를 통해 response body으로 직렬화된다.
    • 클래스 수준에서도 지원되며, 이 경우 모든 컨트롤러 메서드에 상속된다.
    • 비동기 요청과 반응형 타입과 함께 @ResponseBody사용 가능
    • @ResponseStatus(HttpStatus.OK) 애노테이션을 통해 응답 코드 설정 가능
    • MVC Config의 메시지 변환기(Message Converters) 옵션
      • 메시지 변환을 구성하거나 사용자 정의 가능
    • 반환 값이 객체일 때
      • 자동으로 해당 객체를 JSON 형식으로 변환하여 데이터를 전달
      • 변환 과정은 내부적으로 사용되는 JSON 라이브러리, 주로 Jackson 라이브러리를 사용하여 수행
      • 예시코드
      // User 객체
      public class User {
      
          private Long id;
          private String name;
          private String email;
      
          // 생성자, 게터, 세터 생략
      }
      // controller
      @GetMapping("/user/{id}")
      @ResponseBody
      public User getUser(@PathVariable Long id) {
          User user = userService.findById(id);
          return user;
      }
      // 반환되는 JSON 데이터
      {
          "id": 1,
          "name": "John Doe",
          "email": "john.doe@example.com"
      }
  • 반환 값이 기본형일 때
    • 해당 값을 자동으로 JSON 형식으로 변환하여 데이터를 전달
    • 기본형 값의 경우 JSON 객체로 변환되지 않고, 기본형 값을 그대로 반환
    • 예시코드
// controller
@GetMapping("/count")
@ResponseBody
public int getCount() {
    return 42;
}
// 반환되는 JSON 데이터
42
  • ResponseEntity<B>
    • 특징
      • HttpEntity 상속
        • HttpEntity : HTTP 메시지의 헤더, 바디 정보 설정 가능
        • ResponseEntity<B> : HttpEntity + HTTP 응답 코드 설정 가능
      • HTTP 상태 코드, 헤더 및 본문을 포함한 완전한 HTTP 응답 구성 가능
      • 반환되는 객체에 데이터를 포함시키거나 별도로 설정 가능
      • HttpMessageConverter를 통해 HTTP 메시지 직접 입력 가능
        → 프로그램 조건에 따라 응답 코드를 동적으로 변경 가능