Mar 12, 2023
3 mins read
package hello.springmvc.basic.response;
import java.io.IOException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import hello.springmvc.basic.HelloData;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
//@Controller
//@ResponseBody
@RestController //@Controller 대신 사용하면 @ResponseBody가 포함되어있다.
public class ResponseBodyController {
/*
* HttpServletResponse 객체를 통해서 HTTP 메시지 바디에 직접 ok 응답 메시지를 전달한다.
*/
@GetMapping("/response-body-string-v1")
public void responseBodyV1(HttpServletResponse response) throws IOException {
response.getWriter().write("ok");
}
/*
* ResponseEntity 엔티티는 HttpEntity 를 상속 받았는데, HttpEntity는 HTTP 메시지의 헤더, 바디
* 정보를 가지고 있다. ResponseEntity 는 여기에 더해서 HTTP 응답 코드를 설정할 수 있다.
*/
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
/*
* @ResponseBody 를 사용하면 view를 사용하지 않고, HTTP 메시지 컨버터를 통해서 HTTP 메시지를 직접 입력할 수 있다.
* ResponseEntity 도 동일한 방식으로 동작한다.
*/
//@ResponseBody
@GetMapping("/response-body-string-v3")
public String responseBodyV3() {
return "ok";
}
/*
* ResponseEntity 를 반환한다. HTTP 메시지 컨버터를 통해서 JSON 형식으로 변환되어서 반환된다.
*/
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseJsonV1() {
HelloData helloData = new HelloData();
helloData.setUsername("aroong");
helloData.setAge(30);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
/*
* @ResponseStatus(HttpStatus.OK) 애노테이션을 사용하면 응답 코드도 설정할 수 있다.
* 애노테이션이기 때문에 응답 코드를 동적으로 변경할 수는 없다. 프로그램 조건에 따라서 동적으로
* 변경하려면 ResponseEntity 를 사용하면 된다.
*/
@ResponseStatus(HttpStatus.OK)
//@ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseJsonV2() {
HelloData helloData = new HelloData();
helloData.setUsername("aroong");
helloData.setAge(30);
return helloData;
}
}