이번 포스팅에서는 스프링에서 파라미터를 받는 3가지 방법에 대해 기록한다.
스프링 컨트롤러에서는 파라미터를 전달받을 때 자주 사용하는 3가지 방법이 있다.
✅ 역할: HTTP 요청의 본문(Body)에 담긴 데이터를 통째로 받아와 자바 객체(DTO/VO)로 변환(매핑)하여 바인딩한다.
✅ 데이터 위치: HTTP Body
✅ 사용 예시: 새로운 리소스를 생성(POST)하거나, 기존 리소스를 수정(PUT/PATCH)할 때, 대량의 데이터나 복잡한 구조의 데이터를 전달할 때 사용한다.
✅ 필수 여부: 기본적으로 필수이다. Body가 없거나 매핑에 실패하면 오류가 발생한다.
✅ 요청 예시: POST /api/users와 함께 Body에 JSON 데이터 전송
➡️ HTTP Message Converter(ex. Jackson)가 자동으로 JSON/XML을 자바 객체로 변환해준다.
복잡한 객체 데이터 전달 (생성/수정)
JSON, XML 등의 구조화된 데이터
주요 메소드: POST, PUT, PATCH
✅ 역할: URL 경로 자체에 포함된 값을 추출하여 변수에 바인딩한다.
✅ 데이터 위치: URI 경로 세그먼트 /api/users/{userId}
✅ 사용 예시: 리소스의 ID와 같이 특정 리소스를 식별할 때 사용한다. 특히 RESTful API에서 리소스 식별자로 자주 사용된다.
✅ 필수 여부: 기본적으로 필수이다. 경로에 없으면 404 Not Found 또는 500 Internal Server Error가 발생한다.
✅ 요청 예시: /api/users/10 ➡️ id에 10이 들어감
리소스 식별(ID)
단순 문자열/숫자
주요 메소드: GET, DELETE, PUT, PATCH
✅ 역할: HTTP 요청의 쿼리 스트링에 포함된 값을 추출하여 변수에 바인딩한다. 주로 검색 조건, 필터링, 페이지네이션 등에 사용된다.
✅ 데이터 위치: URL의 ? 뒤에 오는 key=value 형태 또는 폼 데이터
✅ 사용 예시: 필터링, 검색, 페이지 번호 등 부가적인 데이터를 전달할 때 사용한다.
✅ 필수 여부: 기본적으로 필수이지만, required = false 속성으로 선택적(Optional)으로 설정할 수 있다.
✅ 요청 예시: /api/search?query=java ➡️ query에 java
필터링, 검색 조건, 부가 데이터
단순 문자열/숫자
주요 메소드: GET