서론
HTTP API 에서 주로 사용하는 JSON 형식으로 데이터를 전달하고 출력하는 방법을 알아보자.
JSON란?
JavaScript Object Notation이라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환형식이다.
특징
- 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용된다.
- 자바스크립트 객체 표기법과 아주 유사하다.
- 다른 프로그래밍 언어를 이용해서도 쉽게 만들 수 있다.
결과
Json 형식으로 파싱할 수 있게 객체생성
// HelloData
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class HelloData {
private String username;
private int age;
lombok이 제공하는 @Getter @Setter을 이용하여 자동으로 getter, setter를 생성한다.
일단, Json 형식으로 data를 보내고 제대로 값이 들어오는지 확인해보자.
// JsonServlet
@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);
response.getWriter().write("ok");
JsonServlet를 작성하고 Postman으로 실행하여 결과를 보자.
- POST : http://localhost:8080/request-body-json
- content-type : application/json
- message body : {"username":"hello","age":20}
참고로 Get방식으로 데이터를 전달할 때는 Http 메시지 바디를 사용하지 않기 때문에 Content-type이 없다. 따라서 Post방식으로 보내야 한다.
제대로 들어오는 것을 확인할 수 있다.
다음은 Json 결과를 파싱하여 자바 객체로 변환하여 출력을 해보자.
필자는 스프링 부트로 Spring MVC를 선택하였기 때문에 기본으로 Jackson 라이브러리를 제공한다.
private ObjectMapper objectMapper = new ObjectMapper();
Json 형식으로 파싱할 수 있는 객체를 생성한다.
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
objectMapper의 readValue를 이용하여 value값을 hellodata에 넣어준다.
System.out.println("helloData.username = " + helloData.getUsername());
System.out.println("helloData.age = " + helloData.getAge());
앞에서와 마찬가지로 이번에도 똑같이 PostMan을 이용하여 데이터를 넣어준다.
결과.
제대로 출력됨을 확인할 수 있다.
전체코드
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");
}
}
참고
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
'Programming > Back-end Language' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크란? (List/Set/Map) (2) | 2022.04.28 |
---|---|
[JAVA] Servlet HTTP 응답 데이터(Response) TEXT/ HTML / JSON (0) | 2022.04.17 |
[JAVA] Http 요청 데이터 -GET쿼리 파라미터 사용 방법 (0) | 2022.04.14 |
[JAVA] 쓰레드 풀(Thread Pool)란? (0) | 2022.04.13 |
[Spring] Test 코드를 작성해야 하는 이유/방법 (0) | 2022.04.13 |