본문 바로가기

💻Spring

[REST API] GET 메서드에서의 데이터 전달

반응형

서론

현재 회사에서는 Spring - java - mybatis / JSP - jQuery를 사용하고 있는데,

회사 팀 내에서 JPA와 React를 도입하자는 의견들이 있어 자체적으로 프론트 개발자분들 두 분과 나와 백엔드 개발자 한분 이렇게 넷이서 팀을 꾸려 당장 서비스엔 도입이 힘드니, 회사 공식 홈페이지를 개발해보기로 했다.

회의를 통해 공통 응답과 몇 안되는 API 리스트업을 하여 작업 후 우선 개발 서버에 배포를 하였는데, 

프론트 개발자분께서 지속적으로 에러가 발생하는 부분에 대해 피드백을 주셔서 확인을 해보았다.

 

본론

에러를 확인해보니 400 에러가 떨어지는데 @RequestBody를 통해 받는 객체에 매핑이 안되는 내용이였다.

분명 PostMan에서는 정상적으로 API가 작동하는것을 확인 했는데 React에서 Fetch 나 Axios를 통해 호출하면 400 에러가 떨어졌다.

확인해보니, jquery의 Ajax처럼 React의 Fetch나 Axios , Spring 템플릿 ( Thymeleaf ) 에서 모두 Get 메서드에는 Body를

지원하지 않는다는 것이였다.

 

HTTP GET method with payload body (leedo.me)

 

HTTP GET method with payload body

HTTP GET method와 Body 값을 같이 사용할 수 있는 지 리서치한 내용입니다 Postman과 cURL에서 당연히 사용할 수 있어서 의심없이 사용하다가 안드로이드에서 기본 통신 라이브러리를 빌드했을 때 GET wit

leedo.me

위 블로그 글을 보면 HTTP 규약에서 get 메서드에 body를 허용한 시점이 2014년도이기 때문에, 일부 클라이언트들이 지원하지 않을 수 있다는 내용이 있다.

그동안 프론트엔드 개발자분들과 협업을 많이 진행해보지 않았기 때문에, PostMan으로만 테스트를 했던 나로써는 Get 메서드에 Body가 당연히 된다고 생각을 하고 작업을 했었다.

 

결론

Get 메서드를 사용 할 때 데이터를 전달하고 싶은 경우 HTTP 규약상 문제가 없지만, 일부 클라이언트들이 지원하지 않을 수 있기 때문에 웬만하면 Body를 사용하지 말고, Query String 혹은 Path Variable을 사용하도록 하자!

  

반응형