본문 바로가기

Spring

Spring MissingServletRequestParameterException: Required String parameter '~~' is not present 오류 해결

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter '~~' is not present 오류 해결

상황

api를 호출하면서 에러가 발생했다.

@DeleteMapping(value = "/viewCategoryTemplate/{categoryNo}")
public ApiResponseWrapper deleteTeam(@RequestParam(value = "teamNo") Long teamNo) {
    return teamService.deleteTeam(teamNo);
}

똑같은 형태면서 POST로 호출하는 것은 잘 되었으나, DELETE로 호출하는 것은 에러가 났다.

인터넷을 찾아보니 넘겨줘야 하는 파라미터를 넘기지 않아서 이 파라미터를 찾을 수 없기 때문에 에러가 난다는 말이 있었다.

개발자 도구 네트워크 탭에서 api 호출하는 걸 보니 파라미터를 잘 넘겨주고 있었다...

해결

잘 동작하는 코드와 다른 점은 메소드 밖에 없었어서 이와 관련해서 찾아보니

버전이 낮은 Spring에서는 delete 메소드에 body를 세팅할 수 없다는 것을 알게 되었다.

4.2.x 버전 Spring부터는 delete 메소드에 body를 세팅할 수 있다!

@DeleteMapping(value = "/viewCategoryTemplate/{categoryNo}")
public ApiResponseWrapper deleteTeam(@PathVariable(value = "teamNo") Long teamNo) {
    return teamService.deleteTeam(teamNo);
}

버전을 바꿀 수는 없는 상황이라서 @RequestBody로 받던 것을 @PathVariable로 받아서 해결했다.

참고

https://stackoverflow.com/questions/68348273/java-spring-boot-required-string-parameter-xxx-is-not-present-for-delete-met

https://dogpaw.tistory.com/4