@RequestParam으로 POST요청 받기, 400에러

서현서현·2023년 9월 3일
0

작은 실수들

목록 보기
17/19

회원가입 구현중 다음 에러가 발생했다.

2023-09-04 01:37:21.103  WARN 16740 --- [io-8080-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'email' for method parameter type String is not present]

페이로드에 값이 제대로 들어가는것까지 확인했는데 왜 컨트롤러가 파라미터를 못읽는거지??? 하고 의문이 생겼다.

회원가입은 ajax를 이용해서 개인정보를 POST 전송 하고있었고.. @RequestParam이 POST에서도 사용 가능하다고 하길래 썼는데 왜 이런걸까.. 하고 몇시간동안 뻘짓을했다.

결론은 content-type의 문제였다.
@PostMapping에서 @RequestParam을 사용해서 받을 수 있는것은 HTML Form태그에서 method가 POST 전송일때다.
즉 ajax로 보내더라도, content-type이 application/x-www-form-urlencoded이면 된다.
또한 이 설정은 기본값이므로 그냥 안써주면 된다.

나의경우 바보같이 이전에 쓰던 코드를 복붙하다가.. json타입으로 지정해놓은것을 발견해서 해결했다. (또한 key-value형태로 보내주는것도 잊지말자)

0개의 댓글