📦 Client에서 Server로 Data를 전달하는 방법
Query Parameter,HTTP Form Data,HTTP Request Body크게 세 가지 존재
1. GET + Query Parameter (쿼리 파라미터)
✅ 특징
?key=value 형식으로 데이터 전송📎 예시 URL
http://localhost:8080/request-params?key1=value1&key2=value2
🗒️ 예시 코드
@Slf4j
@Controller
public class RequestParamController {
@GetMapping("/request-params")
public void params(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
log.info("key1Value={}, key2Value={}", key1Value, key2Value);
response.getWriter().write("success");
}
}
response.getWriter().write()HttpServletResponse를 사용해서 응답 값을 직접 다룰 수 있음@Controller 지만 @ResponseBody를 함께 사용한 것과 같음2. POST + HTML Form (x-www-form-urlencoded)
✅ 특징
<form> 태그로 전송하거나 Postman에서 x-www-form-urlencoded 선택 시 사용key1=value1&key2=value2 형식이지만, URL이 아닌 본문(Body)에 담김📎 예시 Request
POST /form-data
Content-Type: application/x-www-form-urlencoded
key1=value1&key2=value2
🗒️ 예시 코드
@Slf4j
@Controller
public class RequestBodyController {
@PostMapping("/form-data")
public void requestBody(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
log.info("key1Value={}, key2Value={}", key1Value, key2Value);
response.getWriter().write("success");
}
}
→ request.getParameter("key")는 GET/POST 모두에서 작동함!
3. POST + JSON (or TEXT/XML)
✅ 특징
application/json으로 전송📎 예시 JSON
{
"title": "Hello",
"content": "World"
}
🗒️ 예시 코드
package com.example.springbasicannotation.controller;
import com.example.springbasicannotation.entity.Board;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.PostMapping;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@Slf4j
@Controller
public class RequestBodyController {
// JSON을 객체로 변환해주는 Jackson 라이브러리
private ObjectMapper objectMapper = new ObjectMapper();
@PostMapping("/request-body")
public void requestBody(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody={}", messageBody);
Board board = objectMapper.readValue(messageBody, Board.clss);
log.info("board.getTitle()={}, board.getContent()={}", board.getTitle(), board.getContent());
response.getWriter().write("success");
}
}
@Getter @Setter
public class Board {
private String title;
private String content;
}
→ ObjectMapper는 JSON 문자열을 Java 객체로 자동 변환
✅ 세 가지 방식 비교 요약표
| 방식 | 전송 위치 | 데이터 형식 | 주요 용도 |
|---|---|---|---|
| GET + Query Parameter | URL 쿼리스트링 | key=value | 단순 조회, 검색 |
| POST + HTML Form | Request Body | key=value | 로그인, 회원가입, 폼 전송 등 |
| POST + JSON (Request Body) | Request Body | JSON (혹은 XML, TEXT) | REST API 요청 |