RESTful(@RestController)에서의 HTTP request method type
데이터 전송방식인 GET,POST방식과 RESTful GET,POST방식이 무지 헷갈렸지만 이번 기회에 깔끔하게 정리해야겠다..
- GET – 데이터를 검색하여 해당 값을 받아 올때 사용.(CRUD에서 RETRIEVE(검색), SELECT)
- POST – 새롭게 데이터를 생성 할 때 사용 한다. (CRUD에서 CREATE(생성), INSERT)
- PUT – 데이터를 업데이트 할 때 사용 한다. (CRUD 에서 UPDATE(갱신), UPDATE)
- DELETE – 데이터를 삭제 할 때 사용한다. (CRUD 에서 DELETE(삭제), DELETE)
자세하게 예제를 살펴보기 전에 Request에대해서 잠깐 알아보자.
RESTful 방식의 데이터 처리방법으로 JSON을 많이 사용하면서 request의 Content-type은 대부분 application/json이다. Content-type에 대해서는 잠시 뒤 알아보겠다.
파일전송에서는 multipart/form-data타입을 사용하고, form tag와 ajax의 POST, PUT 요청은 Content-type이 default로 application/x-www-form-urlencoded이다.
application/json은 의 형태로 전송되고, application/x-www-form-urlencoded방식은 쿼리 스트링 형태로 &id=test&pw=test..의 형태로 전송 되는 등 차이점이 존재한다.
Content-type 이란?
HTTP Header에 쓰이는 Content-type?
request에 실어 보내는 데이터(body) type의 정보를 표현한다.. 네트워크 시간에 배운 헤더에 타입정보가 들어있다는것이 생각났다...
예를들면
RESTful으로 insert할 경우에는 POST방식으로 JSON객체를 보내기위해 Contetnt-type을 application/json으로 설정
Text타입으로는 text/css,text/javascript,text/html,text/plain등이 있다.
html문서에서 script의 type을 명시할때나 css type을 명시할때 써본적이 있을것이다.
File 전송시에는 multipart/form-data 가 있다.
Application 타입으로는 자주사용하는 application/json, application/x-www-form-urlencode가 있다.
Request에 실어보내는 데이터에 타입에 따라 선택을 해주면 될것이다.
테스트해봤지만 데이터 타입을 잘못 명시해주면 에러가 무진장 떴다....
결론은
ajax로 type을 GET, POST, DELETE, PUT 선택하고 데이터를 전송, 응답 받을시 Content-type을 반드시 지정해주자.
클라이언트가 data를 Request Payload(body)에 담아 보내면 서버에서는 어떻게 data를받을까?
@RequestBody를 이용한다!
서버단에서 @RequestBody는 하나의 객체밖에 받을수 없다!!!!!!
@RequestBody의 동작
Spring MVC Controller에서 요청을 Object(VO,DTO)로 매핑할 때 @RequestBody라는 어노테이션을 제공한다.
- @RequestBody를 사용하지 않은 경우 : Query String parameter, @RequestParam @HttpServletRequest , form data Object에 매핑 등등..
- @RequestBody를 사용하는 경우 : Request Payload(body)에 담긴 data를 HttpMessageConverter(전 포스팅에서 개념 정리함)를 이용해서 선언한 Object에 매핑한다.
@RequestBody 사용시 헤더영역의 Content-type을 JSON과 같이 converter가 변환 할 수 있는 형태로 전송해야한다.
다음 포스팅에서 예제를 통해 @RequestBody의 예시와 RESTful방식의 CRUD 예제를 다뤄봐야겠다.
@RestController와 자주 쓰이는 친구인 jQuery ajax 비동기 방식을 통해 데이터를 주고 받을것이다.
http://bluesky-devstudy.blogspot.com/2016/07/spring-mvc-requestbody.html
'Framework > Spring Framework' 카테고리의 다른 글
[Spring Boot] Spring Security 사용자 정의 보안 기능 구현 (0) | 2021.05.02 |
---|---|
[SpringFramework] RESTFul Web Service Example - GET, POST, PUT, DELETE 예제 (2) | 2018.08.06 |
[SpringFramework] RESTful방식의 @RestController 와 @ResponseBody란? (13) | 2018.08.05 |
[SpringFramework] WebSocket과 Stomp 연동하기 (0) | 2018.08.01 |
[Spring Framework] redirect(리다이렉트) vs forward(포워드) (2) | 2018.07.26 |
댓글