T_era
HTTP Message Body 방식 본문
REST API 구축 시, Server에서 Client로 HTML 대신 데이터를 HTTP Message Body에 JSON 형식으로 담아 전달하는 것이 일반적이다. 정적 HTML이나 View Template 역시 HTTP Message Body에 담겨 전송될 수 있지만, 여기서는 직접 HTTP Response Message를 생성하여 전달하는 경우를 설명한다.
1. HttpServletResponse 사용
@Controller
public class ResponseBodyController {
@GetMapping("/v1/response-body")
public void responseBodyV1(
HttpServletResponse response
) throws IOException {
response.getWriter().write("data");
}
}
response.getWriter().write()를 통해 "data"라는 문자열이 Response Body에 직접 입력되어 응답된다. 이는 기존 Servlet 처리 방식과 유사하다.
2. ResponseEntity<> 사용
@GetMapping("/v2/response-body")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("data", HttpStatus.OK);
}
Response Body에 "data"라는 문자열과 HttpStatus.OK에 해당하는 상태 코드를 함께 반환한다. ResponseEntity는 HttpEntity를 상속받아 HTTP Message의 Header와 Body 정보를 모두 포함할 수 있다.
3. @ResponseBody (TEXT, JSON) 사용
@Data
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 전체 필드를 인자로 가진 생성자
public class Tutor {
private String name;
private int age;
}
// TEXT 데이터 통신
@ResponseBody
@GetMapping("/v3/response-body-text")
public String responseBodyText() {
return "data"; // HTTP Message Body에 "data"
}
// JSON 데이터 통신
@ResponseBody
@GetMapping("/v3/response-body-json")
public Tutor responseBodyJson() {
Tutor tutor = new Tutor("wonuk", 100);
return tutor; // HTTP Message Body에 Tutor Object -> JSON
}
@ResponseBody를 사용하면 View를 거치지 않고 HTTP Message Converter를 통해 HTTP Message Body에 직접 데이터를 입력할 수 있다. 이는 ResponseEntity와 유사한 기능을 제공한다.
@ResponseStatus 어노테이션을 사용하여 상태 코드를 지정할 수 있지만, 응답 코드를 조건에 따라 동적으로 변경하는 것은 불가능하다.
4. ResponseEntity<Object> (JSON)
@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
return new ResponseEntity<>(tutor, HttpStatus.OK);
}
ResponseEntity<>의 두 번째 파라미터에 HttpStatus Enum 값을 사용하여 응답 상태 코드를 설정할 수 있다. HTTP Message Converter를 통해 Tutor 객체가 JSON 형태로 변환되어 반환된다.
5. 동적 응답 코드 변경
@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
if (조건) {
return new ResponseEntity<>(tutor, HttpStatus.OK);
} else {
return new ResponseEntity<>(tutor, HttpStatus.BAD_REQUEST);
}
}
ResponseEntity<>를 사용하면 조건에 따라 응답 상태 코드를 동적으로 변경할 수 있다. ResponseEntity는 HttpEntity를 상속받았으므로 HTTP Header 정보도 함께 설정할 수 있다.
'Programing > Spring' 카테고리의 다른 글
| Custom Exception 처리 심층 분석 및 구현 (0) | 2025.05.07 |
|---|---|
| Client <=> Server 호출 및 응답 요약 (0) | 2025.05.07 |
| View Template 방식 (0) | 2025.05.07 |
| 정적 리소스 응답 방식 (0) | 2025.05.07 |
| Server에서 Client로 Data를 전달하는 방법 (0) | 2025.05.07 |