발제 트러블 슈팅(Lv.2), @PathVariable, @RequestParam, @RequestBody

최길중·2026년 2월 2일

트러블 슈팅
@PathVariable에 익숙해서 2가지를 만들어서 진행 하려고 했는데 API는 1개만 만들어야 한다는 조건이 있어 고민 하다 튜터님께 질문 했다.

    // 전체 조회
    // 작성자명은 조회 조건으로 포함될 수도 있고, 포함되지 않을 수도 있습니다.
    // ex) @GetMapping("/schedules/{nickName}")
    // /schedules?nickName=김철수
    // http://localhost:8080/schedules?nickName=최길중
    @GetMapping("/schedules")
    public ResponseEntity<List<GetScheduleResponse>> getSchedule(// String nickName) 원래 이거
            @RequestParam(required = false) String nickName
    ){
//        return ResponseEntity.status(HttpStatus.OK).body(scheduleService.findAll());
        return ResponseEntity.ok(scheduleService.findAll(nickName));
    }

@RequestParam을 이용해서 푸는 내용이였다.
그렇다면 service를 수정 해야 겠지? 원래 나는 그냥 GetMapping으로 전체 수정을 만들었다.

ScheduleService

이전에 없었던 내용 추가

        List<Schedule> schedules;
        if (nickName == null ) {
            schedules = scheduleRepository.findAll();
        } else {
            schedules = scheduleRepository.findAllByNickName(nickName); // repository에 추가 findAllByNickName
        }

잘나오는 모습!!


Spring MVC:

@PathVariable / @RequestParam / @RequestBody

1) @PathVariable

  • 의미: URL 경로(path) 안에 들어가는 값 (리소스의 고유 식별자)
  • 언제: 특정 1개를 딱 집어서 조회/수정/삭제할 때 (보통 id)
  • 예: /schedules/1 , /schedules/10
@GetMapping("/schedules/{id}")
public ScheduleResponse getOne(@PathVariable Long id) { ... }

@PatchMapping("/schedules/{id}")
public ScheduleResponse update(@PathVariable Long id, @RequestBody UpdateDto dto) { ... }

@DeleteMapping("/schedules/{id}")
public void delete(@PathVariable Long id) { ... }

2) @RequestParam

  • 의미: URL 쿼리스트링(query string) 값 (조회 조건/옵션)
  • 언제: 필터링/검색/정렬/페이지 같은 “옵션” 줄 때 (없어도 되는 값이 많아서 required=false 자주 씀)
  • 예: /schedules?authorName=최길중
  • 예: /schedules?authorName=최길중&sort=updatedAtDesc&page=0
@GetMapping("/schedules")
public List<ScheduleResponse> list(
    @RequestParam(required = false) String authorName,
    @RequestParam(required = false) String sort,
    @RequestParam(required = false, defaultValue = "0") int page
) { ... }

3) @RequestBody

  • 의미: HTTP 요청의 Body(JSON) 에 담긴 데이터
  • 언제: 생성/수정할 “내용”을 보낼 때 (POST/PUT/PATCH) — 보통 DTO로 받는 게 정석
  • 예: POST /schedules + Body(JSON)
@PostMapping("/schedules")
public ScheduleResponse create(@RequestBody CreateDto dto) { ... }

@PutMapping("/schedules/{id}")
public ScheduleResponse replace(@PathVariable Long id, @RequestBody UpdateDto dto) { ... }

Body(JSON) 예:

{
  "title": "회의",
  "content": "10시 회의",
  "authorName": "최길중",
  "password": "1234"
}

한 줄 암기

  • PathVariable: “어떤 대상?” → /schedules/{id}
  • RequestParam: “조회 옵션/조건?” → /schedules?authorName=...
  • RequestBody: “보낼 내용?” → JSON Body
profile
취준생

0개의 댓글