loop-study
개발 공부할래?
loop-study
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 목표 및 회고 (25)
    • 세미나 & 워크샵 (1)
    • 교육 및 인강 (67)
      • TDD, Clean Code with Java (5)
      • ATDD, 클린 코드 with Spring (6)
      • DDD 세레나데 (3)
      • 인프라 공방 (6)
      • 이규원의 현실 세상의 TDD (19)
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
      • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
      • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
      • 스프링 시큐리티 완전정복 6.x (1)
    • 서적 (62)
      • 객체지향의 사실과 오해 (1)
      • 객체지향과 디자인패턴 (7)
      • 만들면서 배우는 클린 아키텍처 (3)
      • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
      • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
      • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
      • 토비의 스프링 (3)
      • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
      • 개발자의 글쓰기 (1)
      • 소프트웨어 장인 (17)
      • Real MySQL 8.0 (2)
    • 개발 & 방법론 (29)
      • Java (13)
      • TDD (5)
      • ATDD (3)
      • DDD (6)
      • 인프라 (2)
      • SQL (0)
    • 개인이야기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 백엔드 로드맵

인기 글

태그

  • 소프트웨어 장인
  • 테스트 주도 개발
  • 추상화
  • 현실세상의 TDD
  • 인프런
  • JUnit
  • 넥스트스탭
  • java
  • 김영한
  • Patterns of Enterprise Application Architecture
  • 장인정신
  • 인프라공방
  • 이규원
  • 자바
  • TDD
  • Test Driven Development
  • 백기선
  • 조영호
  • ATDD
  • study
  • nextstep
  • 스터디
  • fastcampus
  • 스프링
  • 객체지향
  • 마틴 파울러
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • DDD 세레나데
  • 오브젝트
  • 엔터프라이즈 애플리케이션 아키텍처 패턴

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
loop-study

개발 공부할래?

서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON
교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

서블릿(Servlet) - API 메시지 바디 : 단순 텍스트, JSON

2021. 6. 28. 19:03

인프런 김영한 님의 스프링 강의이며, 섹션 2 - 서블릿(Servlet)를 정리한다.

실습형 교육으로 자세한 설명이 궁금하면 수강을 권장한다. (실습은 모두 옛날 방식이며, 현재는 좀 더 편하게 사용한다.)

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com


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
    '교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
    • 서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기
    • 서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON
    • 서블릿(Servlet) - HTTP 요청 데이터 : 개요, GET 쿼리 파라미터, POST HTML Form
    • 서블릿(Servlet) - 서블릿 환경 구성, HttpServletRequest 개요와 기본 사용법
    loop-study
    loop-study
    오늘도 공부하자

    티스토리툴바