JAVA

Spring Boot로 간단한 RESTAPI-GET 구현해보기

solytory 2025. 7. 20. 16:05

💡 먼저 알고 넘어가기 
@?? : @로 시작하는 것은 어노테이션(annotation)으로, Spring이 특별한 방식으로 처리하도록 지시하는 역할을 한다.
@RestController : 해당 클래스가 RESTAPI요청을 처리하는 컨트롤러임을 선언한다.
@RequestMapping("/경로") : 클래스 레벨(즉 클래스 전체)에서의 공통 URL 경로를 지정 이후 메서드들이 URL 앞에 /api가 붙는다.
@GetMapping("/경로") 또는 @GetMapping(path = "/hello") :  메서드 레벨에서 요청을 어떤 HTTP 메서드로 받고, 어떤 경로일 때 실행할지 정한다.
@PathVariable : : URL 경로에 포함된 값을 변수로 받아오기 위해 사용하는 어노테이션으로 
예시 ) /api/user/3 같은 경로에서 숫자 3을 메서드의 파라리터로 전달받고 싶을 때 사용하게 된다. 

 

1. GET 구현해보기

package com.example.self_api.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @GetMapping("/hello")
    public String hello(){
        return "안녕 스트링부트로 만든 RESTAPI";
    }
}

 

♦︎ GET메서드로 HTTP 통신 결과

 

2. GET 구현해 보기(Path Variable)

package com.example.self_api.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @GetMapping(path = "/echo/{message}")
    public String echo(
            @PathVariable String message
    ){
        System.out.println("echo message : " + message); //echo message : 오아오아아
        return message;
    }
}


// 만약 path에 명칭과 PathVariable의 명칭을 같은것을 사용할 수 없다면?
// 아래코드와 같이 작성하여 매칭시켜준다.
 @PathVariable(name = "message") String msg

 

♦︎ GET메서드로 HTTP 통신 결과

 

 

 

3. GET 구현해 보기 (QueryParameter)

URL: /api/book?category=소설&issuedYear=2024&issued-month=07&issued_day=20
// 예: issued-month처럼 하이픈(-)이 있는 파라미터는 객체 매핑이 되지 않기 때문에 name으로 매칭 issued_day는 그대로도 사용 가능

package com.example.self_api.controller;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class RestApiController {
    @GetMapping(path = "/book")
    public String queryParam(
            @RequestParam String category,
            @RequestParam String issuedYear,
            @RequestParam(name = "issued-month") String issuedMonth,
            @RequestParam(name = "issued_day") String issuedDay
    ){
		return category + " : " +issuedYear + " / " + issuedMonth+ " / " + issuedDay;
    }
}

 

♦︎ GET메서드로 HTTP 통신 결과

 

4. GET 구현해 보기 (객체로 QueryParameter 받기)

URL: /api/book?category=소설&issuedYear=2024&issuedMonth=07&issuedDay=20
스프링부트에서는 쿼리 파라미터가 필드명과 일치하면 자동으로 매핑되기 때문에 위에 URL 형식으로 작성한다.

// lombok 사용하여 모델 클래스 생성
package com.example.self_api.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.RequestParam;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BookQueryParam {
    private String category;
    private String issuedYear;
    private String issuedMonth;
    private String issuedDay;
}


////////////////

package com.example.self_api.controller;

import com.example.self_api.model.BookQueryParam;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class RestApiController {
    @GetMapping(path = "/book")
    public String queryParam(
            BookQueryParam bookQueryParam
    ){

        return bookQueryParam.toString();
    }
}

 

 

♦︎ GET메서드로 HTTP 통신 결과

 

📌 주의

QueryParameter를 작성할 때 -(하이픈) 또는 _(언더스코어)를 사용하는 경우 스프링에서 객체로 바인딩할 때 해당 파라미터와 필드명이 일치하지 않아 값이 주입되지 않는 문제가 발생할 수 있으니 URL 파라미터는 객체의 필드명과 동일한 카멜케이스형태로 작성하는 것이 좋다.