본문 바로가기
Spring Tutorial

[스프링 MVC 13] 서블릿: HTTP 요청 데이터 - API 메시지 바디

by 미소5 2023. 7. 20.
  • HTTP message body에 데이터를 직접 담아서 담아서 요청 
    • 먼저 가장 단순한 텍스트 메시지를 담아 전송하고, 읽어보자

  •  HTTP 메시지 바디의 데이터InputStream을 사용해서 직접 읽을 수 있다
@WebServlet(name="requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //HTTP메시지바디의 데이터는 inputStream을 사용해서 직접 읽을 수 있다
        ServletInputStream inputStream=req.getInputStream();
        //inputStream은 byte를 반환하므로, 문자로 변환하려면 Charset을 지정해주어야 한다
        String messageBody= StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        System.out.println("messageBody = " + messageBody);     //hello!

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

    }
}

Postman 테스트 결과

 


 

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

 

  • JSON 형식으로 파싱할 수 있게 객체를 하나 생성
//JSON 형식의 데이터를 객체로 바꿀 수 있도록, 객체 생성
@Getter @Setter //getter, setter 자동 추가해준다
public class HelloData {

    private String username;
    private int age;

}

/**
 * http://localhost:8080/request-body-json
 *
 * JSON 형식 전송
 * content-type: application/json
 * message body: {"username": "hello", "age": 20}
 *
 */
@WebServlet(name="requestBodyJsonServlet", urlPatterns="/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {

    //JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하기위해, ObjectMapper 추가
    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 = objectMapper.readValue(messageBody, HelloData.class);

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

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

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

 

Postman 실행 결과

 



  • lombok이 제공하는 @Getter , @Setter 덕분에 다음 코드가 자동 추가
public class HelloData {
 private String username;
 private int age;
 //==== lombok 생성 코드 ====//
 public String getUsername() {
 return username;
 }
 public void setUsername(String username) {
 this.username = username;
 }
 public int getAge() {
 return age;
 }
 public void setAge(int age) {
 this.age = age;
 }
}

 

  • lombok 세팅

[스프링 MVC 6] 서블릿: 프로젝트 생성 (tistory.com)

 

[스프링 MVC 6] 서블릿: 프로젝트 생성

[spring 입문 1] 프로젝트 생성 (tistory.com) spring 입문 1 -프로젝트 생성 1. java11, intelliJ 설치 2. Spring Initializr 에서 스프링 프로젝트 생성 거의 Gradle Project 버전은 가장 최신 &숫자만 있는 것 선택 group:

joly156.tistory.com

 


 

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

[스프링 MVC 11] 서블릿: HTTP 요청 데이터 - GET 쿼리 파라미터 (tistory.com)

 

[스프링 MVC 11] 서블릿: HTTP 요청 데이터 - GET 쿼리 파라미터

다음 데이터를 클라이언트에서 서버로 전송해보자. username=hello age=20 GET방식(메시지 바디 없이, URL의 쿼리 파라미터를 사용)으로 전송해보자. 쿼리 파라미터는 URL에 다음과 같이 ? 를 시작으로 보

joly156.tistory.com

 


[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (tistory.com)

 

[스프링 MVC 10] 서블릿: HTTP 요청 데이터

HTTP 요청 데이터를 어떻게 조회하는지 알아보자! HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (3가지) GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이, URL의

joly156.tistory.com


 

728x90
반응형