HTTP 요청 데이터
클라이언트에서 서버로 http 요청 메시지를 통해 데이터를 전달하는 방법을 크게 3가지로 나눠볼 수 있다.
1. GET - 쿼리 파라미터
2. POST - HMTL Form
3. HTTP message body
GET - 쿼리 파라미터
이 방법은 url의 뒤에 ? 붙이고 쿼리 파라미터를 작성하면 된다.
http://localhost:8080/request-param?username=kim&age=20
이러한 방식으로 작성하게 되면 username에는 kim, age에 20이 저장된다.
그리고 content-type은 존재하지 않는다.
username과 age를 파라미터라고 하는데, 파라미터를 조회할 수 있는 방법이 있다.
대체적으로 getParameter라는 메서드를 사용하여 파라미터의 값을 조회한다.
여기서 파라미터 이름은 같은데 값이 여러 개일 경우가 있다.
즉, username=kim&username=lee가 올 수 있다.
단일 파라미터를 조회할 경우에는 첫 번째 값을 반환한다.
그래서 전체 파라미터를 조회하고 싶다면 getParameter가 아닌 getParameterValues 메서드를 사용하면 된다.
POST - HTML Form
HTML Form을 이용하여 데이터를 POST하는 방식이다.
1번과 비슷하게 쿼리 파라미터 형식을 사용하지만, 1번과 다르게 content-type이 있고, 메시지 바디에 쿼리 파라미터 형식으로 데이터를 전달한다. ( 1번은 메시지 바디가 없음 )
HTML Form도 쿼리 파라미터 형식을 사용하기 때문에 파라미터를 조회할 때, 1번과 같이 getParameter 메서드를 사용할 수 있다.
API 메세지 바디(단순 메시지)
HTTP 메시지 바디의 데이터는 InputStream을 사용해서 읽을 수 있다.
단순 메시지는 content-type : text/plain 이다.
API 메세지 바디(JSON)
이번에는 JSON 형식으로 데이터를 전달한다.
json형태는 content-type : application/json이다.
위와 똑같이 InputStream을 사용하지만, ObjectMapper클래스를 사용한다.
JSON의 결과를 InputStream으로 읽으면 messageBody = {"username":"kim","age":10} 가 된다.
메시지 바디를 파싱하여 자바 객체로 변환하려면 JSON 변환 라이브러리를 추가해서 사용해야하는데,
이 때 ObjectMapper를 사용하면 된다.
objectMapper에 messageBody를 넣고, 변환할 객체 클래스를 넣어주면 ObjectMapper에서 알아서 파싱을 해주는 것 같다.
그래서 각 변수에 ( username, age )에 값을 넣어주는 것 같다.
HTTP 응답 데이터
http 응답 데이터는 HTTP 응답코드를 지정해주고, 헤더와 바디를 생성해야한다.
크게 3가지로 나눌 수 있다.
1. 단순 텍스트 응답
2. HTML 응답
3. HTTP API - MessageBody JSON 응답
HTML
HTTP 응답으로 html을 반환할 때는 text/html로 content-type을 지정해야한다.
그래서 해당 url로 맵핑을 하게 되면 안녕?이라는 string이 보인다. 그러나 이것은 string이 아니다.
페이지 소스보기를 하면 html 소스 코드를 볼 수 있다.
HTTP 응답 데이터 - API JSON
1번에서는 위와 같이 content-type을 지정해주어야 하는데, json은 application-json로 지정해야한다.
아까 http 요청 데이터를 볼 때에는 json 형식 데이터를 보내게 되면 ObjectMapper에 있는 readValue 메서드를 통해 각각 username, age에 파싱되었다.
하지만 응답 데이터에서는 HelloData 객체를 만들고, 각각 username과 age에 값을 넣어, ObjectMapper 를 통해 데이터를 json 형식으로 바꾼다.
출처 : 인프런 스프링 MVC 1편(김영한 강사님)
'Spring 강의 > 스프링 MVC 1' 카테고리의 다른 글
MVC 1 - 구조 이해 (0) | 2021.09.27 |
---|---|
MVC 1 - MVC 프레임워크 만들기 (0) | 2021.09.18 |
MVC 1 - 서블릿, JSP, MVC 패턴 (0) | 2021.09.14 |
MVC 1 - 웹 애플리케이션 이해 (0) | 2021.09.10 |