[Servlet] Http응답 데이터
단순 텍스트, HTML
HTTP 응답 메시지는 주로 다음 내용을 담아서 전달한다.
- 단순 텍스트 응답
writer.println("ok");
- HTML 응답
- HTTP API - MessageBody JSON 응답
HTML 응답
//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>안녕하세요.</div>");
writer.println("</body>");
writer.println("</html>");
HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html
로 지정해야 한다.
API JSON
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Content-Type: application/json
response.setHeader("content-type", "application/json");
response.setCharacterEncoding("utf-8");
HelloData data = new HelloData();
data.setUsername("kim");
data.setAge(20);
String result = objectMapper.writeValueAsString(data);
response.getWriter().write(result);
//{"username":"kim","age":20}
}
}
HTTP 응답으로 JSON을 반환할 때는 content-type을 application/json
으로 지정해야 한다.
Jackson 라이브러리가 제공하는 objectMapper.writeValueAsString()
을 사용하면 객체를 JSON 문자로 변경할 수 있다.
[참고]
application/json
은 스펙상 UTF-8 형식을 사용하도록 정의되어 있다. 그래서 스펙에서 charset=utf-8과 같은 추가 파라미터를 지원하지 않는다.
따라서, application/json
이라고만 사용해야지 application/json;charset=utf-8
이라고 전달하는 것은 의미 없는 파라미터를 추가한 것이 된다.
response.getWriter()를 사용하면 추가 파라미터를 자동으로 추가해버린다. 이때는 response.getOutputStream()으로 출력하면 문제가 없다.
댓글남기기