
그룹 초대 응답 API를 만들면서 PATCH /api/groups/invites/{requestId} 요청을 호출했을 때
클라이언트에서 토큰도 정상적으로 포함되어 있었고, 인증도 통과된 것처럼 보였는데… 요청이 실패했다..
❗ 로그 메시지
Resolved [org.springframework.web.bind.MissingServletRequestParameterException:
Required request parameter 'accept' for method parameter type boolean is not present]
이 메시지를 처음 보았을 때 "토큰 문제인가?" 싶었지만 실제 원인은 accept 파라미터 누락이었다..! 두둥탁
📌 API 정의
@PatchMapping("/invites/{requestId}")
public ResponseEntity<GroupInviteResponse> respondToInvite(
@PathVariable Long requestId,
@RequestParam boolean accept,
HttpServletRequest request) {
Long userId = (Long) request.getAttribute("userId");
GroupInviteResponse response = groupService.respondToInvite(requestId, userId, accept);
return ResponseEntity.ok(response);
}
이 API는 accept 파라미터를 boolean 타입으로 받고 있어, 해당 값이 요청에 반드시 포함되어야 한다.
하지만 클라이언트에서 다음과 같은 형태로 요청이 들어온다면? 두둥탁2
PATCH /api/groups/invites/1
→ accept 파라미터가 누락되었기 때문에 Spring은 MissingServletRequestParameterException 예외를 발생시키게 된다.
처음 로그에서 이런 메시지가 같이 나왔다.
MissingServletRequestParameterException: Required request parameter 'accept' for method parameter type boolean is not present
Securing PATCH /api/groups/invites/1
User ID extracted from token: 2
이 로그는 Spring Security의 인증 필터가 요청을 보호하고 있고, 토큰에서 userId를 정상적으로 추출했다는 의미이다. 보안 관련 로그와 PATCH 요청이라는 특성 때문에 인증 실패로 착각하게 되었다.
1. 클라이언트 요청 수정
PATCH 요청을 보낼 때 반드시 accept 파라미터를 포함하도록 수정한다.
✅ 초대 수락 시
PATCH /api/groups/invites/1?accept=true
❌ 초대 거절 시
PATCH /api/groups/invites/1?accept=false
accept 파라미터가 빠졌을 때 기본값을 false로 처리할 수도 있다.
@RequestParam(required = false, defaultValue = "false") boolean accept
하지만 다른 블로그를 찾아봤을 때 기본적으로 거절 처리 될 수 있으니 신중하게 사용하라고 해서 안넣었다. 후후
제발! 로그를 정확히 읽고 예외 메세지를 분석하자. 피곤하다면 조금 쉬었다가 다시 보자.. 에헴..
MissingServletRequestParameterException은 파라미터 누락 문제이다.
인증 문제는 401 또는 403 상태코드와 함께 나타나므로 구분이 가능하다