Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

14. HTTP 요청 데이터 - API 메시지 바디 JSON

DEV-HJ 2023. 10. 22. 04:11
반응형

HTTP 요청 데이터 - API 메시지 바디 - JSON


이번에는 HTTP API에서 주로 사용하는 JSON 형식으로 데이터를 전달해보자.

 

JSON 형식 전송

  • POST http://localhost:8080/request-body-json
  • content-type: application/json
  • message body: {"username": "hello", "age": 20}
  • 결과: messageBody = {"username": "hello", "age": 20}

 

JSON 형식 파싱 추가
JSON 형식으로 파싱할 수 있게 객체를 하나 생성하자


hello.servlet.basic.HelloData

package hello.servlet.basic.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;
import org.springframework.util.StreamUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletInputStream inputStream =  req.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        System.out.println(messageBody);
        HelloData helloData =  objectMapper.readValue(messageBody, HelloData.class);

        System.out.println("helloData.username = " + helloData.getUsername());
        System.out.println("helloData.age = " + helloData.getAge());

        resp.getWriter().write("OK");
    }
}

 

실행결과

  • POST http://localhost:8080/request-body-json
  • content-type: application/json (Body raw, 가장 오른쪽에서 JSON 선택)
  • message body: {"username": "hello", "age": 20}

 

출력결과

  • messageBody={"username": "hello", "age": 20}
  • data.username=hello
  • data.age=20

 

참고

  • JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환
    라이브러리를 추가해서 사용해야 한다.
  • 스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리( ObjectMapper )를 함께 제공한다.


참고

  • HTML form 데이터도 메시지 바디를 통해 전송되므로 InputStream으로 직접 읽을 수 있다.
  • 하지만 편리한 파리미터 조회 기능( request.getParameter(...) )을 이미 제공하기 때문에
    파라미터 조회 기능을 사용하면 된다
반응형