ResponseEntity와 Header (공통 응답 방식)의 차이

2025. 1. 10. 20:20PROJECT/J-PLAN

ResponseEntiy를 사용할 경우 

package com.itschool.tableq.network;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Header<T> {
    // api 통신 시간
    private LocalDateTime transactionTime;

    // api 응답 코드
    private String resultCode;

    // api 부가 설명
    private String description;

    private T data;

    private Pagination pagination;

    // Status : OK
    public static <T> Header<T> OK() {
        return (Header <T>)Header.builder()
                .transactionTime(LocalDateTime.now())
                .resultCode("OK")
                .description("OK")
                .build();
    }

    // Data : OK
    public static <T> Header<T> OK(T data) {
        return (Header <T>)Header.builder()
                .transactionTime(LocalDateTime.now())
                .resultCode("OK")
                .description("OK")
                .data(data)
                .build();
    }

    // Data : OK
    public static <T> Header<T> OK(T data, Pagination pagination) {
        return (Header <T>)Header.builder()
                .transactionTime(LocalDateTime.now())
                .resultCode("OK")
                .description("OK")
                .data(data)
                .pagination(pagination)
                .build();
    }

    // ERROR
    public static <T> Header<T> ERROR(String description) {
        return (Header <T>)Header.builder()
                .transactionTime(LocalDateTime.now())
                .resultCode("ERROR")
                .description(description)
                .build();
    }
}

TableQ를 제작했을때 사용한 공통 응답객체인데 BaseEntity를 사용했을때와 차의점은 응답 형식이었다.

Header로 데이터와 status를 결합하여 데이터를 보냈을 때 API 요청 실패 여부와 상관없이 일관성있게

지정해준 Builder 형식에 맞춰 데이터가 전송이 된다.

 

BaseEntity를 사용한 경우에는 성공했을 때는 데이터만, 실패했을 때는 상태값, 메시지, 데이터가 전달된다.

프론트와 협업을 위해 일관성있게 데이터를 전달해줘야 하기 때문에 Header를 적용할 예정

// ResponseEnity를 사용했을때
@PostMapping("/check-email")
public ResponseEntity<Boolean> checkEmail(@RequestBody SignupRequest request){
        if(request.getEmail() != null)
            return ResponseEntity.status(HttpStatus.OK)
                    .body(userService.checkEmail(request.getEmail())
            );
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                .build();
}

// Header로 응답 받을때
@PostMapping("/check-email")
public Header<Boolean> checkEmail(@RequestBody Header<SignupRequest> request){
        User user = request.getData().toEntity();
        try {
            if (user.getEmail() != null)
                return Header.OK(userService.checkEmail(user.getEmail()));
            throw new RuntimeException("Email is NULL");
        } catch (Exception e){
            return Header.ERROR(e.getClass().getSimpleName()+e.getMessage());
        }
}

 

 

참고 : https://velog.io/@dionisos198/공통응답-객체-와-ResponseEntity-비교

'PROJECT > J-PLAN' 카테고리의 다른 글

[데이터베이스 설계]  (0) 2025.01.08