인프런 김영한 님의 스프링 강의이며, 섹션 2 - 서블릿(Servlet)를 정리한다.
실습형 교육으로 자세한 설명이 궁금하면 수강을 권장한다. (실습은 모두 옛날 방식이며, 현재는 좀 더 편하게 사용한다.)
HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트 (문자 전송)
HTTP message body 에 데이터를 담아서 요청
- HTTP API 에서 주로 사용 JSON, XML, TEXT
- 데이터 형식은 대부분 JSON 사용, 오래된 시스템은 XML, TEXT 사용되기도 함.
- 주로 POST, PUT, PATCH에서 사용됨
@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);
response.getWriter().write("ok");
}
포스트맨으로 문자전송을 해보자.
messageBody = hello!
메시지 바디의 값이 정상적으로 나온다.
HTTP 요청 데이터 - API 메시지 바디 - JSON
- 현재 주로 사용되는 JSON 방식으로 보내보자.
- content-type: application/json
- {"username":"hello", "age":20"}
JSON 형식으로 받을 코드는 위와 동일하다.
@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);
response.getWriter().write("ok");
}
포스트맨만 살짝 변경하자.
messageBody = {"username": "hello", "age": 20}
여기까지는 이전과 변함이 없지만 문제는 단순 문자열이라 사용하기 위해서는 JSON 변환 라이브러리 사용해야 한다.
start.spring.io 에서 Spring MVC를 선택하면 기본적으로 Jackson 라이브러리(ObjectMapper)를 제공한다.
이를 사용하여 HelloData 객체로 변환시켜보자.
@Getter @Setter
public class HelloData {
private String username;
private int age;
}
@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);
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");
}
}
helloData.username = hello
helloData.age = 20
*참고 사항*
HttpServletRequest의 inputStream()은 바디 메시지를 byte 코드로 반환한다.
byte 코드를 사람이 읽을 수 있는 문자(String)로 변경하려면 문자표(Charset)를 지정하는데 예제에선 UTF_8 Charset을 지정했다.
'교육 및 인강 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기 (0) | 2021.06.29 |
---|---|
서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON (0) | 2021.06.28 |
서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form (0) | 2021.06.27 |
서블릿(Servlet) - 서블릿 환경 구성, HttpServletRequest 개요와 기본 사용법 (0) | 2021.06.25 |
웹 애플리케이션 이해 - HTML, HTTP API, CSR, SSR, 자바 백엔드 웹 기술 역사 (0) | 2021.06.25 |