[Java] HttpServletRequest와 ObjectMapper를 이용하여 JSON 데이터 전송.

Jeon Min Woo·2023년 2월 18일
0

HttpServeltRequest 객체에 담겨있는 파싱된 HTTP 요청 메시지 덕분에 개발자들은 HTTP 요청 메시지를 편리하게 사용할 수 있다.(개발자가 직접 파싱해도 되지만, 매우 불편할 것이다.)

오늘은 HTTP API에서 주로 사용한 JSON 형식으로 데이터를 전달해보도록 하겠다.

❓ ObjectMapper란?

JSON 컨텐츠를 Java 객체로 deserialization 하거나 Java 객체를 JSON으로 serialization 할 때 사용하는 Jackson 라이브러리의 클래스이다.
ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다.
Jackson 라이브러리에 관한 내용은 더 공부하고 나중에 따로 작성해보도록 하겠다.

JSON 형식 파싱 추가

  • JSON 형식으로 파싱할 수 있게 객체 생성
package hello.servlet.basic;

import lombok.Data;

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

JSON 형태로 파싱할 수 있도록 객체를 하나 생성했다.
lombok 라이브러리를 사용했는데, @Getter @Setter 어노테이션을 사용해도 되고
@Data 어노테이션을 사용해도 무방하다.

  • ObjectMapper를 통해 JSON 읽기.
@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 = " + messageBody);

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

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

    }
}

HttpServlet을 extends한 RequestBodyJsonServlet 클래스를 하나 생성한 후
inputStream을 통해 데이터를 읽고 messageBody속에 UTF-8 형식으로 꺼내준다.

SpringBoot의 기본적인 라이브러리인 jackson 라이브러리를 사용해서 objectMapper.readValue를 통해 JSON 형식으로 변환해서 읽을 수 있음.

  • Postman으로 실제 JSON 데이터 전달
  • 데이터 확인

0개의 댓글