더보기
Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.
마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.
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 |
댓글