주로 API 서버를 만들어서 사용하다 보면 Json 포맷으로 데이터를 주고 받게 된다.
그렇다면 Json을 그대로 사용하지 않고, 객체에 매핑해서 사용한다.
하지만, Json을 파싱해서 사용하면 매우 불편할것이다.
그래서 스프링(자바)에서는 Json을 문자열로 사용하지 않고, 그대로 객체로 맵핑해주는 방법이 존재한다고 한다.
보통 스프링 부트를 사용하면 Jackson 라이브러리를 사용할 수 있다.
예시 코드는 아래와 같다.
@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 {
// Http Request Body에 존재하는 데이터를 가져오기 위한 코드
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
// 문자열을 Jackson 라이브러리 객체를 이용해서 Java 객체에 맵핑
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
System.out.println("helloData.username = " + helloData.getUsername());
System.out.println("helloData.age = " + helloData.getAge());
response.getWriter().write("ok");
}
}
위 코드의 핵심은 Jackson 라이브러리의 ObjectMapper 객체이다.
ObjectMapper 객체는 Json 문자열을 자바 객체에 매핑해주는 역할을 수행한다.
위 코드는 Http Request로 전달된 Json 메시지를 자바 객체로 변환해주는 역할을 했지만, 그 반대도 가능하다.
Http Response에서 자바 객체를 Json 객체로 만들어서 전달할 수 도 있다.
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type: application/json
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("kim");
helloData.setAge(20);
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
}
HttpServletRequest가 존재하듯이 HttpServletResponse 객체도 존재한다고 한다.
개발자가 Http 응답 메시지를 직접 만들어줄 필요 없이 HttpServletResponse 객체를 활용하면 응답 메시지를 좀 더 쉽게 만들어서 전달할 수 있다.
해당 포스팅은 아래의 강의를 학습 후 정리한 내용입니다.
김영한님의 스프링MVC1편