본문 바로가기

Spring Boot/스프링 부트 핵심 가이드

[SpringBoot] 5.2 GET API 만들기

Summary : GET API는 서버에서 값을 가져올 때 사용하고,
PathVariable과 ReqestParam을 이용해서 값을 넘겨줄 수 있다.

🔍 목차


5.2 GET API 만들기
    5.2.1 @RequestMapping
    5.2.2 매개변수가 없는 GET 메서드
    5.2.3 @PathVariable을 이용하는 GET 메서드
    5.2.4 @RequestParam을 이용하는 GET 메서드
    5.2.5 DTO 객체를 이용하는 GET 메서드

📌 5.2 GET API 만들기


  • GET API는 서버에서 값을 가져올 때 사용하는 API
  • GET API를 작성하는 방법은 아래와 같다.
    1. 매개변수 없이
    2. @PathVariable
    3. @RequestParam

📌 5.2.1 @RequestMapping


  • @RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다.
  • 따라서 GET 형식의 요청만 받기 위해서는 어노테이션에 별도 설정이 필요하다.
    => @RequestMapping(method = RequestMethod.GET)
  • 클래스 수준에서 @RequestMapping을 설정하면
    클래스 내부에 선언한 메서드의 URL 리소스 앞에 @RequestMapping 의 값이 공통 값으로 추가된다.
  • 4.3 버전 이후로는 더 이상 @RequestMapping를 쓰지 않고,
    더 명시적으로 HTTP method를 나타내주는 아래의 어노테이션을 사용한다.
    • @GetMapping
    • @PostMapping
    • @PutMapping
    • @DeleteMapping

📌 5.2.2 매개변수가 없는 GET 메서드 구현


  • 별도의 매개변수 없이 GET API를 구현하는 경우 아래와 같이 코드를 작성할 수 있다.
    하지만 웹 통신의 기본 목적이 데이터를 주고받는 것이기 때문에 매개변수가 없는 GET 메서드는 거의 쓰이지 않는다.
@GetMapping(value = "/name") // 디폴트가 value이므로 value= 부분 생략 가능
public void getName() {
}

 

📌 5.2.3 @PathVariable을 활용한 GET 메서드 구현


  • PathVarible은 URL에 값을 담아 전달하는 방법
  • 값을 받아오기 위해서는 아래 원칙을 지켜야 한다.
    1) URL에 중괄호 { }를 사용하여 받아올 변수의 위치와 이름을 표시
    2) 컨트롤러 함수의 인자 부분에 @PathVariable을 명시하고, 변수 이름을 중괄호 내부와 통일
    3) 이름을 통일하기 어렵다면, @PathVariable("중괄호 내부 이름") 으로 받아올 수도 있음
@GetMapping(value = "/variable1/{variable}")
public String getVariable1 (@PathVariable String variable) { 
	return variable; 
}

@GetMapping(value="/variable2/{variable}")
public String getVariable2 (@PathVariable("variable") String var) {
	return var;
}

 

📌 5.2.4 @RequestParam을 활용한 GET 메서드 구현


  • RequestParam은 쿼리 스트링 형식으로 값을 전달하는 방법
  • 쿼리 스트링 형식은 ?로 시작하고, 키와 값을 = 로 연결하고 복수의 키와 값은 &로 연결하는 형식
    e.g ?id=9&name=yonso
  • 컨트롤러 메서드의 인자로 @RequestParam과 키와 일치하는 변수명을 사용하면 값을 받아올 수 있음
  • 이름을 통일하기 어렵다면, @RequestParam("키이름") 으로 받아올 수도 있음
@GetMapping(value = "/request1")
public String getRequestParam1(@RequestParam String name) {
     return "name: " + name;
}

@GetMapping(value = "/request2")
public String getRequestParam1(@RequestParam("name") String userName) {
     return "user: " + userName;
}

 

💡cf. required와 defaultValue 옵션


  • PathVariable과 RequestParam 모두 위와 같이 설정하고 형식에 맞게 입력하지 않으면 오류가 발생함
  • 이를 막아주는 것이 Required와 Default 옵션
  • cf. default가 아니라 defaultValue인 것 주의
@GetMapping(value = "/request1")
public String getRequestParam1(@RequestParam(required=false, defaultValue="yonso") String name) {
     return "name: " + name;
}

 

📌 5.2.5 DTO 객체를 활용한 GET 메서드 구현


  • DTO란, Data Transfer Object의 약자
  • DTO는 Repository를 제외한 모든 레이어 간의 데이터 교환에 활용됨
  • DTO에는 private 필드, Getter, Setter만 존재함
    cf. DTO와 VO의 역할은 서로 엄밀하게 구분하지 않고 사용한다.
  • DTO의 필드는 쿼리 스트링의 키와 매핑됨
public String getRequestParam3 (MemberDto memberDto){
	return memberDto.toString();
}