Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의
웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있
www.inflearn.com
마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.
GitHub - Kloong1/TIL: Today I Learned.
Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.
github.com
HTTP 응답 데이터 - Plain Text, HTML, JSON(API 응답)
HTTP 응답 메시지에는 주로 다음과 같은 형식의 내용을 담아서 전달한다.
- 단순 텍스트 응답
- 앞에서 살펴 봤음 (
response.getWriter().write("OK")
)
- 앞에서 살펴 봤음 (
- HTML 응답
- HTTP API - JSON 등의 형태로 응답
HTML 응답
ResponseHtmlServlet.java
package com.kloong.servlet.basic.response;
import javax.servlet.ServletException;
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.io.PrintWriter;
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type : text/html;charset=utf-8
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>Hello</div>");
writer.println("</body>");
writer.println("</html>");
}
}
HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html
로 지정해야 한다. 그래야 웹 브라우저가 정상적으로 렌더링 할 수 있다.
API (JSON) 응답
ResponseJsonServlet.java
package com.kloong.servlet.basic.response;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kloong.servlet.basic.HelloData;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type: application/json
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("Kloong");
helloData.setAge(27);
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
}
- HTTP 응답으로 JSON을 반환할 때는 content-type을
application/json
로 지정해야 한다. - Jackson 라이브러리가 제공하는
objectMapper.writeValueAsString()
를 사용하면 객체를 JSON 형태의 string으로 파싱할 수 있다.
참고
application/json
은 스펙상utf-8
형식을 사용하도록 정의되어 있다. 그래서Content-Type:application/json;charset=utf-8
과 같이 character set을 임의로 지정해 주는 것은 의미 없는 파라미터를 추가한 것이 된다.
그런데response.getWriter()
를 사용하면 character set을 지정하지 않아도 자동으로 default characer set 파라미터를 추가해버린다. 이때는response.getOutputStream()
으로 출력하면 그런 문제가 없다.
참고 내용 코드
//생략
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
HelloData helloData = new HelloData();
helloData.setUsername("Kloong");
helloData.setAge(27);
byte[] bytes = objectMapper.writeValueAsBytes(helloData);
response.getOutputStream().write(bytes);
}
}
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] 15. 순수 Servlet으로 회원 관리 Web App 구현 (0) | 2022.11.23 |
---|---|
[Spring MVC] 14. 회원 관리 WebApp 요구사항(강의용 토이 프로젝트) (0) | 2022.11.23 |
[Spring MVC] 12. HttpServletResponse (0) | 2022.11.23 |
[Spring MVC] 11. HTTP 요청 데이터 - 메시지 바디 (0) | 2022.11.23 |
[Spring MVC] 10. HTTP 요청 데이터 - POST & HTML Form (0) | 2022.11.23 |
댓글