Spring 요청값 바인딩 요약 (@PathVariable / @ModelAttribute / @RequestBody)
1) @PathVariable (URL 경로)
- 언제 쓰나: 특정 “대상(리소스)”을 명확히 식별해야 할 때 (1건 조회/수정/삭제)
- 이유: URL 자체가 “무슨 대상을 다루는지”를 표현 → 로그/권한/캐시/디버깅이 명확
- 예시
GET /api/building/qr/setting/1 → 1번 조회
DELETE /api/building/qr/setting/1 → 1번 삭제
PATCH /api/building/qr/setting/1 → 1번 수정
2) @ModelAttribute (쿼리스트링/폼 필드 → 객체 바인딩)
- 언제 쓰나: 목록 조회에서 검색/필터/정렬/페이징 조건을 여러 개 받을 때
- 이유: 조건이 많고 optional이 많아 DTO로 묶기 편함 + URL로 재현/공유/디버깅 쉬움
- 예시
GET /api/building/qr/setting?buildingSeq=626&searchText=3층&page=1
- 참고: 단일 파라미터는
@RequestParam을 많이 씀
3) @RequestBody (요청 Body: JSON 등)
- 언제 쓰나: 생성/수정처럼 “저장할 데이터(payload)”를 통째로 보낼 때
- 이유: 필드가 많거나 구조가 복잡한 데이터를 URL로 보내기 어렵고, 검증(@Valid)도 쉬움
- 예시
POST /api/building/qr/setting
- Body:
{ "buildingSeq": 626, "placeName": "3층 복도" }
PATCH /api/building/qr/setting/1
- PathVariable로 대상(1번) + Body로 변경값 전달
한 줄 정리
- PathVariable = “어떤 대상인가(ID)”
- ModelAttribute = “조회 조건(필터/페이지/정렬)”
- RequestBody = “저장/변경할 내용(payload)”