HTTP 요청 데이터 - API 메시지 바디 - JSON
이번에는 HTTP API에서 주로 사용하는 JSON 형식으로 데이터를 전달해 보자.
JSON 형식 전송
- POST http://localhost:8080/request-body-json
- content-type: application/json
- message body: {"username": "hello", "age": 20}
- 결과: messageBody = {"username": "hello", "age": 20}
JSON 형식 파싱 추가
JSON 형식으로 파싱 할 수 있게 객체를 하나 생성하자
hello.servlet.basic.HelloData
package hello.servlet.basic;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class HelloData {
private String username;
private int age;
}
lombok이 제공하는 @Getter , @Setter 덕분에 다음 코드가 자동으로 추가된다.(눈에 보이지는 않는다.)
package hello.servlet.basic;
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;
}
}
참고 : 만약 잘 동작하지 않는다면 프로젝트 생성에 롬복 부분을 다시 확인하자.
RequestBodyJsonServlet
package hello.servlet.basic.request;
import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;
import org.springframework.util.StreamUtils;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@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 {
ServletInputStream inputStream = request.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());
System.out.println("helloData.age = " + helloData.getAge());
response.getWriter().write("ok");
}
}
Postman으로 실행해 보자.
- POST http://localhost:8080/request-body-json
- content-type: application/json (Body raw, 가장 오른쪽에서 JSON 선택)
- message body: {"username": "hello", "age": 20}
출력 결과
messageBody={"username": "hello", "age": 20}
data.username=hello
data.age=20
참고
JSON 결과를 파싱 해서 사용할 수 있는 자바 객체로 변환하려면
Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용해야 한다.
스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리( ObjectMapper )를 함께 제공한다.
참고
HTML form 데이터도 메시지 바디를 통해 전송되므로 직접 읽을 수 있다.
하지만 편리한 파리미터 조회 기능( request.getParameter(...) )을 이미 제공하기 때문에
파라미터 조회 기능을 사용하면 된다.
출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'Spring MVC > 서블릿' 카테고리의 다른 글
[Spring MVC] 서블릿 - HTTP 응답 데이터 (단순 텍스트, HTML) (0) | 2023.01.26 |
---|---|
[Spring MVC] 서블릿 - HttpServletResponse 기본 사용법 (0) | 2023.01.26 |
[Spring MVC] 서블릿 - HTTP 요청 데이터 (API 메시지 바디 - 단순 텍스트) (0) | 2023.01.26 |
[Spring MVC] 서블릿 - HTTP 요청 데이터 (Post HTML Form) (0) | 2023.01.26 |
[Spring MVC] 서블릿 - HTTP 요청 데이터 개요, GET 쿼리 파라미터 (0) | 2023.01.26 |