[Spring 입문] HTTP 요청 데이터

박화랑·2025년 3월 18일

Spring_개념정리

목록 보기
15/17

1. Client에서 Server로 데이터 전달 방법

클라이언트에서 서버로 데이터를 전달하는 방법은 크게 세 가지로 나뉜다.

  • Query Parameter (쿼리 문자열)
  • HTTP Form Data (x-www-form-urlencoded)
  • HTTP Request Body (JSON, TEXT 등)

2. GET + Query Parameter

  • URL의 쿼리 파라미터를 사용하여 데이터를 전달하는 방식
http://localhost:8080/request-params?key1=value1&key2=value2
  • HttpServletRequest를 활용한 구현
@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()를 사용하여 직접 응답 값을 반환할 수 있다.
  • Postman 요청 및 실행 결과
    • GET 요청 시 http://localhost:8080/request-params?key1=value1&key2=value2
    • 로그 출력: key1Value=value1, key2Value=value2

3. POST + HTML Form Data (x-www-form-urlencoded)

  • HTTP Request Body에 데이터를 key=value 형식으로 전달하는 방법
  • HTTP Request 예시
POST /form-data
Content-Type: application/x-www-form-urlencoded

key1=value1&key2=value2
  • HttpServletRequest를 활용한 구현
@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");
    }
}
  • Postman 요청 및 실행 결과
    • POST 요청 시 Content-Type: application/x-www-form-urlencoded
    • 로그 출력: key1Value=value1, key2Value=value2

4. HTTP Request Body (JSON 데이터 전달)

  • JSON, TEXT, XML 등의 데이터를 HTTP Body에 담아 전달하는 방식
  • POST, PUT, PATCH 메서드에서 주로 사용
  • GET, DELETE 메서드에서는 Body 사용을 권장하지 않음

HttpServletRequest를 활용한 JSON 데이터 처리

@Getter
@Setter
public class Board {
    private String title;
    private String content;
}
@Slf4j
@Controller
public class RequestBodyController {
    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.class);

        log.info("board.getTitle()={}, board.getContent()={}", board.getTitle(), board.getContent());
        response.getWriter().write("success");
    }
}
  • Postman 요청 및 실행 결과
    • POST 요청 시 Content-Type: application/json
    • Body: { "title": "Spring", "content": "Spring Framework" }
    • 로그 출력:
      messageBody={"title":"Spring","content":"Spring Framework"}
      board.getTitle()=Spring, board.getContent()=Spring Framework

5. JSON을 Java 객체로 변환하는 방법

  • Spring Boot는 기본적으로 Jackson 라이브러리의 ObjectMapper를 제공
  • starter-web에 포함되어 있으며, 별도 추가 설정 없이 사용 가능
  • JSON → Java 객체 변환 예시
Board board = objectMapper.readValue(jsonString, Board.class);

profile
개발자 희망생

0개의 댓글