[Spring Boot] POST API (@RequestBody)

박현아·2025년 3월 18일
0

Spring Boot

목록 보기
5/5

*<스프링 부트 핵심 가이드>에 나온 내용을 실습해보는 포스팅입니다.

🎃 POST API 란?

POST API는 클라이언트가 서버로 데이터를 전송할 때 사용하는 API이다. RESTful API에서 HTTP 요청 방식 중 POST 메서드를 사용하여 데이터를 생성하거나 처리할 때 활용된다.

🎃 POST API 특징

  1. 데이터 생성(Create) 또는 처리
    서버에 새로운 데이터를 추가하거나, 특정 작업을 수행할 때 사용됨.
  2. 요청 데이터는 Body에 포함
    GET과 달리 데이터를 Request Body에 JSON 형식으로 담아 전송함.
  3. 멱등성이 없음(Non-Idempotent)
    같은 요청을 여러 번 보내면 중복된 데이터가 생성될 수 있음.
  4. 캐싱 불가
    POST 요청은 주로 데이터를 변경하는 작업이므로 브라우저나 CDN에서 캐싱하지 않음.

🎃 @RequestBody 란?

✔️ @RequestBody는 클라이언트가 보낸 JSON, XML 등의 데이터를 Java 객체로 변환(매핑)해주는 어노테이션이다.
✔️ Spring Boot에서 POST, PUT 요청의 Body 데이터를 컨트롤러에서 받을 때 사용된다.

🎃 @RequestBody 특징

  1. 클라이언트가 요청 Body에 담아 보낸 JSON 데이터를 Java 객체로 변환
  2. Jackson 라이브러리를 이용해 JSON ↔ Java 객체 자동 변환
  3. DTO(Data Transfer Object)와 함께 사용하여 데이터를 효율적으로 전달 가능
  4. @RequestParam, @PathVariable과 달리 URL이 아니라 요청 본문(Request Body)에서 데이터를 가져옴

👩‍💻 POST API 실습

1️⃣ PostController 클래스 만들기

2️⃣ 메서드 작성

package com.springboot.api.controller;

import java.util.Map;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.springboot.api.dto.MemberDTO;

@RestController
@RequestMapping("/api/v1/post-api")
public class PostController {

	// 요청을 통해 어떤 값이 들어올지 모를 때 Map 사용 
	@PostMapping("/member")
	public String postMember(@RequestBody Map<String, Object> postData) {
		
		StringBuilder sb = new StringBuilder();
		
		postData.entrySet().forEach(map -> {
			sb.append(map.getKey() + " : " + map.getValue() + "\n");
		});
		
		return sb.toString();
	}
	
	// 요청 메시지에 들어갈 값이 정해져 있을 때 DTO 사용 
	@PostMapping("/member2")
	public String postMemberDTO(@RequestBody MemberDTO memberDTO) {
		return memberDTO.toString();
	}
}

3️⃣ 동작 테스트 : Talend API Tester 사용

1) /api/v1/post-api/member


BODY에 값도 넣어 전송해줘야 한다.

{
  "name": "Flature",
  "email": "glature@gmail.com",
  "organization" : "hub studio"
}

결과


key와 value 값이 잘 전송되었다.

2) /api/v1/post-api/member2

위의 /member와 마찬가지로 BODY에 값을 넣어준다.

결과


MemberDTO를 썼기 때문에 응답의 형태는 다르지만 잘 전송됐다.

0개의 댓글