[SpringBoot] 클라이언트 REST API 응답 보내기 (HTTP Method)

끄적끄적·2023년 6월 5일
0

👀 HTTP 메서드

  • 클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식

1. 클라이언트에게 JSON 형태 응답 최종 결과

  • GET, POST 등 클라이언트에게 요청이 왔을 때 응답

2. Response 클래스

  1. 상태코드를 담을 클래스
public class StatusCode {
    public static final int OK = 200;
    public static final int CREATED = 201;
    public static final int NO_CONTENT = 204;
    public static final int BAD_REQUEST =  400;
    public static final int NOT_FOUND = 404;
    public static final int INTERNAL_SERVER_ERROR = 500;
    // 추가 가능

}
  1. 응답 메세지 클래스
public class ResponseMessage {
    public static final String PRODUCT_POST = "상품 등록 성공";
    public static final String PRODUCT_READ = "상품 조회 성공";
    public static final String PRODUCT_UPDATE = "상품 정보 수정 성공";
    public static final String PRODUCT_PATCH = "상품 정보 일부 수정 성공";
    public static final String PRODUCT_DELETE = "상품 삭제 성공";

}
  1. 정보를 담을 클래스
public class ProductReq {
    private String name;
    private Long price;
}
  1. 상태코드, 응답메세지, 데이터 형식을 갖춰서 응답해줄 클래스
@Data
@AllArgsConstructor
@Builder
public class DefaultRes<T>{

    private int statusCode;
    private String responseMessage;
    private T data;

    public DefaultRes(final int statusCode, final String responseMessage) {
        this.statusCode = statusCode;
        this.responseMessage = responseMessage;
        this.data = null;
    }

    public static<T> DefaultRes<T> res(final int statusCode, final String responseMessage) {
        return res(statusCode, responseMessage, null);
    }

    public static<T> DefaultRes<T> res(final int statusCode, final String responseMessage, final T t) {
        return DefaultRes.<T>builder()
                .data(t)
                .statusCode(statusCode)
                .responseMessage(responseMessage)
                .build();
    }

}
  1. Controller 예시
  • 상품 등록 API에 적용해보았다.
@PostMapping("api/product")
    public ResponseEntity saveProduct(@RequestBody com.example.springboot.entity.Product product) {
        productService.save(product);
        return new ResponseEntity(DefaultRes.res(StatusCode.OK, ResponseMessage.PRODUCT_POST, product), HttpStatus.OK);
    }

3. 응답을 적용하기 전과 후

  1. 적용 전
  • 상품 등록 API
 // 상품 등록
    @PostMapping("api/product")
    public String saveProduct(@RequestBody com.example.springboot.entity.Product product) {
        productService.save(product);
        return "등록되었습니다.";
    }
  • Postman 테스트
  1. 적용 후
  • 상품 등록 API
// 상품 등록
    @PostMapping("api/product")
    public ResponseEntity saveProduct(@RequestBody com.example.springboot.entity.Product product) {
        productService.save(product);
        return new ResponseEntity(DefaultRes.res(StatusCode.OK, ResponseMessage.PRODUCT_POST, product), HttpStatus.OK);
    }
  • Postman 테스트

0개의 댓글