Book/스프링부트 핵심가이드

POST 메서드 구현 방법(feat. @PostMapping)

블로그 주인장 2023. 10. 25.

API를 작성하는 다양한 방법

HTTP 메서드에 해당하는 API를 개발하고 그 과정에서 필요한 내용들 중

하나인 POST 메서드의 구현에 관하여 자세하게 알아보겠습니다.


POST API

웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API이다.

 

GET API와 POST API의 차이점

  • GET : URL의 경로나 파라미터에 변수를 넣어 요청을 보낸다.
  • POST : 저장하고자 하는 리소스의 값을 HTTP 바디(Body)에 담아 서버에 전달한다. URI가 GET API에 비해 간단하다.
@RestController
@RequestMapping("/sample")
public class SampleController{
}

@RequestMapping으로 구현하기

 메서드를 정의할 때, method 요소를 RequestMethod.POST로 설정하는 부분을 제외하면 GET API와 동일하다.

@RestController
@RequestMapping("/sample")
public class SampleController{

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public Stirng postExample(){
    	return "post api";
    }
}

@RequestBody를 활용한 POST 메서드 구현

일반적으로 POST 형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용한다. 그러므로 클라이언트의 요청 트래픽에 값이 포함되어 있다. 즉, POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송한다.

Body 영역에 작성되는 값은 일반적으로 JSON(JavaScript Object Notation) 형식으로 전송된다.

 

@PostMapping을 사용하면 method 요소를 정의하지 않아도 된다.

@RequestBody라는 어노테이션을 사용한다.

@RequestBody : HTTP의 Body 내용을 해당 어노테이션이 지정된 객체에 매핑하는 역할을 한다.

@RestController
@RequestMapping("/Sample")
public class SampleController {
	
    //http://localhost:8080/Sample/member
    @PostMapping(value = "/member")
    public String postValue(@RequestBody Map<String, Object> param) {
    	StringBuilder sb = new StringBuilder();
        
        param.entrySet().forEach(map -> {
        	sb.append(map.getKey() + " " + map.getValue() + "\n");
        });
        
        return sb.toString();
    }
}

DTO 객체를 활용한 GET 메서드 구현

@RestController
@RequestMapping("/Sample")
public class SampleController {
	
    //http://localhost:8080/Sample/member
    @PostMapping(value = "/member")
    public String postMember(@RequestBody MemberDto memberDto) {
        return memberDto.toString();
    }
}
반응형

댓글