[Spring] HTTP 요청 데이터

이연우·2025년 7월 23일

TIL

목록 보기
29/100

📦 Client에서 Server로 Data를 전달하는 방법

  • Query Parameter, HTTP Form Data, HTTP Request Body 크게 세 가지 존재

1. GET + Query Parameter (쿼리 파라미터)

  • URL 주소에 데이터를 붙여 보내는 방식

✅ 특징

  • URL 뒤에 ?key=value 형식으로 데이터 전송
  • 빠르고 간단해서 조회(READ) 같은 요청에 사용
  • 민감한 데이터 전송에는 적절하지 않음 (URL에 노출되기 때문)

📎 예시 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)

  • 폼 데이터를 Request Body에 담아 보내는 방식

✅ 특징

  • HTML <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)

  • JSON 형식의 데이터를 HTTP Message Body에 담아 전송

✅ 특징

  • REST API에서 가장 많이 사용되는 방식
  • 데이터를 구조화하여 전송(JSON, XML, TEXT 등)
  • 클라이언트는 application/json으로 전송
  • 서버는 Jackson 같은 라이브러리를 통해 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 ParameterURL 쿼리스트링key=value단순 조회, 검색
POST + HTML FormRequest Bodykey=value로그인, 회원가입, 폼 전송 등
POST + JSON (Request Body)Request BodyJSON (혹은 XML, TEXT)REST API 요청

0개의 댓글