inblog logo
|
DailyCoding
    Spring Boot

    [참고] x-www-form-urlencoded 파싱

    박은서's avatar
    박은서
    Jan 29, 2026
    [참고] x-www-form-urlencoded 파싱
    Contents
    1️⃣ 핵심 요약2️⃣ x-www-form-urlencoded가 자동으로 파싱되는 이유3️⃣ 왜 JSON은 자동으로 안 될까?4️⃣ multipart/form-data도 자동이 아닌 이유5️⃣ 정리: Content-Type별 처리 방식6️⃣ 실습에서 기억하면 좋은 한 문장
    💡
    Spring MVC 실습 - @PostMapping에서 x-www-form-urlencoded는 자동으로 파싱된다!

    1️⃣ 핵심 요약

    Spring MVC에서 @PostMapping으로 요청을 받을 때
    • ✅ application/x-www-form-urlencoded
      • → 자동으로 파싱됨
    • ❌ application/json, multipart/form-data 등
      • → 추가 설정이나 어노테이션이 필요
    이 차이는 Spring의 데이터 바인딩 방식과 HttpMessageConverter 동작 차이 때문입니다.

    2️⃣ x-www-form-urlencoded가 자동으로 파싱되는 이유

    1) HTML <form>의 기본 전송 방식

    <form method="post" action="/users"> <input name="name" value="kim"/> <input name="age" value="20"/> </form>
    이 경우 브라우저는 기본적으로
    Content-Type: application/x-www-form-urlencoded
    형태로 요청을 보냄
    전송되는 실제 바디는:
    name=kim&age=20

    2) Spring MVC의 기본 동작

    Spring MVC는 이 타입을 보면 내부적으로 다음 과정을 거침
    1. Servlet 컨테이너(Tomcat) 가 먼저 파싱
    1. 파싱된 값들을 HttpServletRequest.getParameter() 로 제공
    1. Spring은 이를 기반으로 Data Binding 수행
    ➡️ 아래 코드가 아무 설정 없이 동작
    @PostMapping("/users") public String create(User user) { // name, age 자동 바인딩 }
    또는
    @PostMapping("/users") public String create( @RequestParam String name, @RequestParam int age ) { }
    ➡️ 이 과정은 **JSON 파싱이 아니라 “파라미터 매핑”**

    3️⃣ 왜 JSON은 자동으로 안 될까?

    1) JSON 요청 예시

    POST /users Content-Type: application/json { "name": "kim", "age": 20 }
    이 경우:
    • getParameter() 로는 값을 꺼낼 수 ❌
    • 요청 바디를 직접 읽어서 객체로 변환해야 함
    ➡️ Spring은 HttpMessageConverter 를 사용

    2) 이때 필요한 것

    @PostMapping("/users") public String create(@RequestBody User user) { }
    @RequestBody를 붙이면
    • MappingJackson2HttpMessageConverter
    • JSON → Java 객체 변환 수행
    ➡️ **어노테이션이 없으면 Spring은 “바디를 읽지 않는다”**고 생각하면 됨

    4️⃣ multipart/form-data도 자동이 아닌 이유

    파일 업로드 예시:
    Content-Type: multipart/form-data
    이 경우도:
    • 단순 key-value가 아님
    • boundary 기반으로 파싱 필요
    그래서 아래처럼 받아야 함
    @PostMapping("/upload") public String upload( @RequestParam MultipartFile file, @RequestParam String title ) { }

    5️⃣ 정리: Content-Type별 처리 방식

    Content-Type
    처리 방식
    어노테이션
    x-www-form-urlencoded
    Servlet 파라미터 바인딩
    ❌ 불필요
    query string
    Servlet 파라미터 바인딩
    @RequestParam
    application/json
    HttpMessageConverter
    @RequestBody
    multipart/form-data
    Multipart Resolver
    @RequestParam, MultipartFile

    6️⃣ 실습에서 기억하면 좋은 한 문장

    Spring에서 “자동으로 파싱되는 것처럼 보이는 x-form”은 사실 JSON 파싱이 아니라 Servlet 파라미터 매핑이다.
    Share article
    Contents
    1️⃣ 핵심 요약2️⃣ x-www-form-urlencoded가 자동으로 파싱되는 이유3️⃣ 왜 JSON은 자동으로 안 될까?4️⃣ multipart/form-data도 자동이 아닌 이유5️⃣ 정리: Content-Type별 처리 방식6️⃣ 실습에서 기억하면 좋은 한 문장

    DailyCoding

    RSS·Powered by Inblog