study/Spring boot

컨트롤러가 post 요청을 받을 때(+put/patch, delete + REST)

올스왑 2021. 3. 24. 12:42

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