HttpServeltRequest 객체에 담겨있는 파싱된 HTTP 요청 메시지 덕분에 개발자들은 HTTP 요청 메시지를 편리하게 사용할 수 있다.(개발자가 직접 파싱해도 되지만, 매우 불편할 것이다.)
오늘은 HTTP API에서 주로 사용한 JSON 형식으로 데이터를 전달해보도록 하겠다.
JSON 컨텐츠를 Java 객체로 deserialization 하거나 Java 객체를 JSON으로 serialization 할 때 사용하는 Jackson 라이브러리의 클래스이다.
ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다.
Jackson 라이브러리에 관한 내용은 더 공부하고 나중에 따로 작성해보도록 하겠다.
package hello.servlet.basic;
import lombok.Data;
@Data
public class HelloData {
private String username;
private int age;
}
JSON 형태로 파싱할 수 있도록 객체를 하나 생성했다.
lombok 라이브러리를 사용했는데, @Getter
@Setter
어노테이션을 사용해도 되고
@Data
어노테이션을 사용해도 무방하다.
@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 형식으로 변환해서 읽을 수 있음.