728x90
반응형
- 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");
}
}
- 이번에는 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 )를 함께 제공
- 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)
- HTML form 데이터도 메시지 바디를 통해 전송되므로 InputStream으로 직접 읽을 수 있다. 하지만 편리한 파리미터 조회 기능( request.getParameter(...) )을 이미 제공하기 때문에 파라미터 조회 기능을 사용하면 된다.
[스프링 MVC 11] 서블릿: HTTP 요청 데이터 - GET 쿼리 파라미터 (tistory.com)
[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (tistory.com)
728x90
반응형
'Spring Tutorial' 카테고리의 다른 글
[스프링 MVC 15] 서블릿: HTTP 응답 데이터 (0) | 2023.07.22 |
---|---|
[스프링 MVC 14] 서블릿: HttpServletResponse (0) | 2023.07.21 |
[스프링 MVC 12] 서블릿: HTTP 요청 데이터 - POST HTML Form (0) | 2023.07.20 |
[스프링 MVC 11] 서블릿: HTTP 요청 데이터 - GET 쿼리 파라미터 (0) | 2023.07.20 |
[스프링 MVC 3] 웹 애플리케이션 이해: 동시 요청 - 멀티 쓰레드 (0) | 2023.07.19 |