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가 적용됨.
'스프링 공부 (인프런 김영한 선생님) > 스프링 MVC 1편' 카테고리의 다른 글
[스프링 웹 MVC 1편] 27. 요청 매핑 핸들러 어댑터 구조 (0) | 2023.06.05 |
---|---|
[스프링 웹 MVC 1편] 26. HTTP 메세지 컨버터 (0) | 2023.06.04 |
[스프링 웹 MVC 1편] 24. HTTP 응답 - 정적 리소스, 뷰 템플릿 (0) | 2023.06.04 |
[스프링 웹 MVC 1편] 23. HTTP 요청 파라미터 (JSON) (0) | 2023.06.03 |
[스프링 웹 MVC 1편] 22. HTTP 요청 파라미터 (@ModelAttribute, 단순 텍스트) (0) | 2023.06.03 |