스프링 공부 (인프런 김영한 선생님)/스프링 MVC 1편

[스프링 웹 MVC 1편] 25. HTTP 응답 - HTTP API, 메세지 바디에 직접 입력

ProgYun. 2023. 6. 4. 15:35
package hello.springmvc.basic.response;

import hello.springmvc.basic.HelloData;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
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.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@Slf4j
@Controller
public class ResponseBodyController {

    @GetMapping("/response-body-string-v1")
    public void responseBodyV1(HttpServletResponse response) throws IOException{
        response.getWriter().write("ok");
    }

    @GetMapping("/response-body-string-v2")
    public ResponseEntity<String> responseBodyV2(){
        return new ResponseEntity<>("OK", HttpStatus.OK);
    }

    @ResponseBody
    @GetMapping("/response-body-string-v2")
    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) 서블릿을 직접 다룰 때 처럼 HTTP 메세지 바디에 직접 OK 입력

 

ResponseBodyV2) HttpEntity의 상속을 통해 HttpEntity가 갖고 있는 메세지의 헤더 바디 정보를 수정,

ResponseEntity는 여기에 더해 HTTP 응답 코드의 설정이 가능함.

 

ResponseBodyV3) @ResponseBody를 사용하면 뷰 사용 없이 HTTP 메세지 컨버터를 통해서 HTTP 메세지의 직접 입력이 가능

ResponseEntity도 동일한 방식으로 동작한다.

 

ResponseBodyJsonV1) ResponseEntity를 반환한다, HTTP 메세지 컨버터를 통해서 Json형식으로 변환되어 반환된다.

 

ResponseBodyJsonV2) ResponseEntity는 HTTP 응답 코드를 설정할 수 있는데 @ResponseBody를 사용하면 이런것을 설정하기 까다롭기 때문에 @ResponseStatus(HttpStatus.OK) 애노테이션을 사용하면 응답코드도 설정할 수 잇다.

 

@RestController -> 해당 컨트롤러에 모두 @ResponseBody가 적용됨.