컨트롤러가 post 요청을 받을 때(+put/patch, delete + REST)
HTTP 통신에서는 사용자에게 요청을 받는 주소가 있어야 하는데 주소마다 받는 메소드들을 모아 놓은 것이 컨트롤러다.
컨트롤러에서 post 요청을 받는 메소드를 만들려면 선언부 위에
* @ReqeustMapping을 사용해서 method를 post으로 설정한다
* @PostMapping을 붙인다.
@RequestMapping(method = RequestMethod.POST, path = "/post")
// 또는
@PostMapping("/post")
* 컨트롤러의 메소드끼리 같은 주소를 매핑한다면 에러가 생긴다. 하지만 컨트롤러(클래스)끼리 주소가 겹치는 건 괜찮다.
post 요청에 경우 HTTP 패킷의 Body 데이터를 담아 보낸다. mime 타입을 정해서 받을 수 있고, 기본값은 "application/json"이다. 메소드의 매개변수 앞에 @RequestBody를 붙인다.
User는 필드값으로 userId, email, age 를 갖고 있고 {"userId":"shin", "email":"shin@gmail.com", "age":"5"} 라는 json을 보냈다고 가정하자
@PostMapping("/post")
public User postMethod(@RequestBody User user){
return user;
}
클라이언트는 그대로 json 형태로 user 필드의 값을 받게 된다.
관련글:
2021.03.22 - [study/Spring boot] - 엉터리 정리 - 스프링이 요청을 받는 방식, Maven, Lombok
2021.03.23 - [study/Spring boot] - 컨트롤러가 get 요청을 받을 때
Post 요청은 주소 창에 파라미터가 노출되지 않는 특징이 있다. 따라서 클라이언트의 요청 사항이 노출되지 않는다.
Post 요청은 Get 방식보다 주소 길이를 길게 할 수 있다.(제한 존재)
브라우저가 주소 캐시를 하지 못하는 특성이 있다.
Put / Patch : Post와 같이 Body에 데이터가 들어 있으며 , 주로 업데이트에 사용한다.
Delete : Get과 같이 주소에 파라미터가 들어 있으며, 데이터를 삭제할 때 사용한다.
REST?
- HTTP Method를 활용한 아키텍처 스타일
- HTTP Method를 통해 resource를 처리
- CRUD를 통한 resource를 조작할 때 사용
Get | Read(Select) |
Post | Create |
Put / Patch | Update(Create) |
Delete | Delete |