💡 먼저 알고 넘어가기
@?? : @로 시작하는 것은 어노테이션(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 파라미터는 객체의 필드명과 동일한 카멜케이스형태로 작성하는 것이 좋다.
'JAVA' 카테고리의 다른 글
Spring Boot로 간단한 RESTAPI-PUT 구현해보기 (0) | 2025.07.20 |
---|---|
Spring Boot로 간단한 RESTAPI-POST 구현해보기 (0) | 2025.07.20 |
메서드 참조 알아보기 (0) | 2025.07.03 |
제네릭, 함수형 인터페이스, 람다표현식에 대해 개념정리 (0) | 2025.07.03 |
추상클래스 vs 인터페이스 (2) | 2025.06.29 |