Home 섹션2 서블릿) HTTP 요청 데이터 - API 메시지 바디 - JSON
Post
Cancel

섹션2 서블릿) HTTP 요청 데이터 - API 메시지 바디 - JSON

본 포스트는 스프링 MVC 1편(김영한, 인프런) 강의를 통해 학습한 내용을 작성자 임의 대로 요약 및 정리한 것입니다.


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

1. JSON 형식 전송

  • POST 방식
    => http://localhost:8080/request-body-json
  • content-type
    application/json
  • message body
    {"username": "hello", "age": 20}

  • 결과
    {"username": "hello", "age": 20}

2. JSON 형식 파싱 추가

  JSON 형식으로 파싱 되도록
객체를 하나 생성하기!

/main/~/hello.servlet/basic/에서
HelloData.java를 다음과 같이 작성.

1
2
3
4
5
6
@Getter @Setter
public class HelloData {

    private String username;
    private int age;
}


/main/~/hello.servlet/basic/request에서
RequestBodyJsonServlet.java
다음과 같이 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@WebServlet(name = "requestBodyJsonServlet", 
            urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet 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);

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


그런 뒤에 postman에서
POST 메서드로
http://localhost:8080/request-body-json 주소로
body에는 다음과 같이 입력.

1
{"username": "hello", "age": 20}

raw 체크, JSON 선택!

그런 뒤 “Send”로 전송을 하면
서버 로그에 아래와 같이 찍힌다.

1
messageBody = {"username": "hello", "age": 20}

  2.1. 스프링에서 JSON 파싱하기

  JSON을 사용가능한 자바 객체로 변환하려면
–> Jackson, Gson 등의 JSON 변환 라이브러리 사용.
스프링 부트에서는 Jackson 라이브러리 제공함.
(ObjectMapper)

이 라이브러리를 이용해서
다음과 같이 코드 작성.

1
2
3
4
5
6
7
8
9
10
11
protected void service(~~){
        ~~~~
        HelloData helloData 
                = objectMapper.readValue(messageBody, 
                                         HelloData.class);
        System.out.println("helloData.getUsername = " 
                          + helloData.getUsername());
        System.out.println("helloData.getAge = " 
                          + helloData.getAge());
        ~~~~
}

그리고 실행한 뒤에
postman으로 똑같이 전송하면
서버 로그에 아래와 같이 찍힌다.

1
2
helloData.getUsername = hello
helloData.getAge = 20
Contents