오봉이와 함께하는 개발 블로그

스프링 MVC 1 - HTTP 요청 데이터 API 메시지 바디 TEXT, JSON 본문

BE/Servlet

스프링 MVC 1 - HTTP 요청 데이터 API 메시지 바디 TEXT, JSON

오봉봉이 2022. 8. 10. 21:24
728x90

HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트

  • HTTP message body에 데이터를 직접 담아서 요청한다.
    • HTTP API에서 주로 사용
      • JSON, XML, TEXT
    • 데이터 형식은 주로 JSON 사용
    • POST, PUT, PATCH 메서드에서 주로 사용한다
  • 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고 읽어보자.
  • HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다.

코드

  • Postman을 통해 다음 코드를 테스트 해보자
    • POST
    • body 탭
      • raw 데이터
        • 내용 입력
@WebServlet(name = "requestBodySpringServlet", urlPatterns ="/request-body-string")
public class RequestBodySpringServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream(); // 메시지 바디 내용을 바이트 코드로 얻을 수 있다.
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // 바이트 코드를 문자열로 바꿔주는 메서드
        // 바이트 코드를 문자열로 바꿀 때는 문자표를 지정해야 한다. 여기서는 StandardCharsets.UTF_8

        System.out.println("messageBody = " + messageBody);

        response.getWriter().write("ok");
    }
}
  • 참고
    • inpustStream은 byte 코드를 반환한다.
    • byte 코드를 우리가 읽을 수 있는 문자로 보려면 문자표(Charset)을 지정해주어야 한다.
    • 여기서는 UTF_8을 지정했다.

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

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

  • JSON 형식 전송

JSON 형식 파싱 추가

JSON 형식이기 때문에 JSON 형식의 데이터를 객체로 바꿀 수 있도록 파싱할 수 있게 객체를 생성하자.

hello.servlet.basic.HelloData

@Getter @Setter
public class HelloData {
    private String username;
    private int age;
}

코드, 결과

@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
    private ObjectMapper objectMapper = new ObjectMapper();
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        System.out.println("messageBody = " + messageBody);

        HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
        System.out.println("helloData.getUsername() = " + helloData.getUsername());
        System.out.println("helloData.getAge() = " + helloData.getAge());

        response.getWriter().write("ok");
    }
}
  • Postman으로 실행해보자
messageBody = {"username": "hello", "age": 20}
helloData.getUsername() = hello
helloData.getAge() = 20

참고

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

HTML Form 데이터도 메시지 바디를 통해 전송되므로 직접 읽을 수 있다.
하지만 편리한 request.getParameter()을 제공하기 때문에 제공하는 기능을 사용하자.

출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
Comments