T_era

Client에서 Server로 데이터 전달 방식 정리 본문

Programing/Spring

Client에서 Server로 데이터 전달 방식 정리

블스뜸 2025. 5. 6. 17:32

1. Query Parameter (Query String)

  • HTTP Method: GET
  • 전달 방식: URL의 ? 뒤에 key=value 형태로 데이터를 연결하며, 복수의 파라미터는 &로 구분한다.
    • 예시: http://localhost:8080/request-params?key1=value1&key2=value2
  • HttpServletRequest 사용: request.getParameter("key") 메서드를 통해 각 파라미터 값을 획득한다.
@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()를 사용하여 응답을 직접 작성하며, @Controller이지만 @ResponseBody를 병용한 것과 동일한 결과를 나타낸다.

2. HTTP Form Data (x-www-form-urlencoded)

  • HTTP Method: POST
  • 전달 방식: HTTP Request Body에 key=value 형태로 데이터를 담아 전송하며, Content-Type은 application/x-www-form-urlencoded로 설정된다.
  • HttpServletRequest 사용: request.getParameter("key") 메서드를 통해 파라미터 값을 획득한다. Query Parameter와 동일한 접근 방식을 취한다.
@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");
    }
}
  • HttpServletRequest.getParameter("key")는 Query Parameter와 HTML Form Data 양쪽 모두에서 데이터 추출이 가능하다.

3. HTTP Request Body

  • HTTP Method: POST, PUT, PATCH (GET, DELETE는 Body 데이터 전송을 권장하지 않는다)
  • 전달 방식: JSON, TEXT, XML 등 다양한 형식의 데이터를 HTTP Message Body에 직접 담아 전송한다. @RestController에서 주로 사용되며, JSON 형식이 일반적이다.
  • HttpServletRequest 사용: request.getInputStream()을 통해 Request Body의 내용을 직접 읽어 처리해야 한다.
@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");
    }
}
  • ObjectMapper: JSON 데이터를 Java 객체로 변환하거나, Java 객체를 JSON 데이터로 변환하는 Jackson 라이브러리의 클래스이다.
  • request.getInputStream(): HTTP 요청 Body의 입력 스트림을 획득한다.
  • StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8): 입력 스트림의 내용을 UTF-8 형식의 문자열로 변환한다.
  • objectMapper.readValue(messageBody, Board.class): JSON 형식의 문자열(messageBody)을 Board 클래스의 객체로 변환한다.
@Getter
@Setter
public class Board {
    private String title;
    private String content;
}

 

'Programing > Spring' 카테고리의 다른 글

HTTP Message Body (요청)  (0) 2025.05.07
@RequestParam과 @ModelAttribute  (0) 2025.05.07
MultiValueMap  (0) 2025.05.06
MediaMapping의 속성별 차이점  (0) 2025.05.06
특정 파라미터 및 헤더 매핑  (0) 2025.05.06