RestAPI 알아보기 (Get - with DTO)

Gihongg·2024년 3월 15일

Spring Boot

목록 보기
3/24

DTO란?

Data Transfer Object 의 약자로 데이터 이동을 위한 객체라는 뜻

직전 게시물에서 나왔듯 @RequestParam 으로 쿼리를 모두 정해주는 방식이 있다.

좀더 편하게 하기 위해 DTO를 만들어 사용하는 방식을 실습하자

먼저 클래스 객체를 만들어준다.


@Data
@AllArgsConstructor //모든 파라미터를 받는 기본 생성자 생성해주는 어노테이션
@NoArgsConstructor //어떤 파라미터도 받지 않는 기본 생성자 생성해주는 어노테이션
public class BookQueryParam {

    private String category;
    private String issuedYear;
    private String issuedMonth;
    private String issuedDay;

}

어노테이션 정리

먼저 3가지 어노테이션 @Data, @AllArgsConstructor, @NoArgsConstructor에 대해서 알아보자

@Data

@Data 어노테이션은 Lombok 라이브러리가 제공하는 어노테이션으로, Java 클래스에 필드 접근자 메서드 (getter, setter, equals, hashCode, toString)를 자동으로 생성한다.

아래의 메서드들이 자동으로 생성된다.

  • getName(): name 필드의 값을 가져오는 메서드
  • setName(String name): name 필드의 값을 설정하는 메서드
  • getAge(): age 필드의 값을 가져오는 메서드
  • setAge(int age): age 필드의 값을 설정하는 메서드
  • equals(Object obj): 두 객체의 내용을 비교하는 메서드
  • hashCode(): 객체의 해시 코드를 계산하는 메서드
  • toString(): 객체의 정보를 문자열로 표현하는 메서드

위와 같이 객체의 사용에 필요한 여러 메서드들을 생성해준다.

@AllargsConstructor

주석에 달려있듯이 모든 파라미터(매개변수)를 입력받는 생성자 메서드를 제공해준다.
만약 BookQueryParam 클래스라면

public BookQueryParam(String category, String issuedYear, String issuedMonth, String issuedDay) {
    this.category = category;
    this.issuedYear = issuedYear;
    this.issuedMonth = issuedMonth;
    this.issuedDay = issuedDay;
}

와 같은 생성자가 제공된다.

@NoArgsConstructor

어떤 파라미터, 매개변수도 받지 않는 생성자 메서드를 제공해준다.


queryParamDTO

이제 이 클래스를 활용해 DTO를 통한 GetMapping에 대해서 알아보자.

아래의 그 코드이다.

package org.example.restapi.restapi.controller;


import org.example.restapi.restapi.controller.model.BookQueryParam;
import org.springframework.web.bind.annotation.*;

import static org.apache.coyote.http11.Constants.a;

@RestController
@RequestMapping("/api")
public class RestApiController {

    @GetMapping(path = "/book")
    public void queryParamDTO(
            BookQueryParam bookQueryParam
    ){
        System.out.println(bookQueryParam);
    }

}

위의 코드를 스프링부트로 실행하면 다음과 같은 주소로 접속했을 때 bookQueryParam의 각 파라미터들을 출력해낸다.

http://localhost:8080/api/book?category=소설&issuedYear=2023&issuedMonth=10&issuedDay=15

위의 주소로 접속해야 하는 이유는 아래의 쿼리 규칙을 만족하기 위해서이다.

  • 쿼리 파라미터는 ? 기호로 시작합니다.
  • 쿼리 파라미터는 & 기호로 연결됩니다.
  • 키-값 쌍은 = 기호로 구분됩니다.
  • 한글과 같은 특수문자는 URL 인코딩해야 합니다.

출력은 이렇게 나오게 될 것 이다.

BookQueryParam(category=소설, issuedYear=2023, issuedMonth=10, issuedDay=15)

profile
전천후 개발자

0개의 댓글