-
Spring MVC - 응답 메시지를 만드는 방법 (정적 리소스, 뷰 템플릿, HTTP API 메시지 바디에 직접 입력)Spring/Spring MVC 2022. 1. 29. 23:04728x90반응형
응답 메시지를 만드는 방법
- 정적 리소스
- 정적 HTML, CSS, javascript를 제공 - 뷰 템플릿
- 동적 HTML을 제공(뷰 템플릿을 사용한다) - HTTP API, 메시지 바디에 직접 입력
- HTTP API를 제공하는 경우 HTML이 아니라 데이터를 전달해야 하므로
HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.
정적 리소스
- 스프링 부트는 클래스 패스의 아래와 같은 디렉터리 안에 있는 정적 리소스를 제공한다.
/static, /public, /resources, /META-INF/resources - str/main/resources는 리소스를 보관하는 곳이고, 또한 클래스패스의 시작 경로이다.
따라서 다음 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공한다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> hello Sprring MVC </body> </html>
클라이언트가 정적 리소스인 hellospringmvc.html을 요청하면 스프링 부트가 내장 톰캣을 통하여 자동으로 정적 리소스를 찾아 응답 메시지를 보내준다. str/main/resources는 클래스패스의 시작 경로이기 때문에 요청 URL은 localhost:8080/hellospringmvc.html 이 된다.
뷰 템플릿
- 뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어 전달
- 일반적으로 동적 HTML을 요청 메시지로 보내기 위해 사용
- 스프링 부트는 기본 뷰 템플릿 경로를 제공
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html - Controller를 통한 Mapping이 되어야 한다.
- ModelAndView, Model을 이용
뷰 템플릿 생성
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p th:text="${data}">empty</p> </body> </html>
ModelAndView을 이용한 동적 HTML 응답 메시지 처리
- ModelAndView 객체에 동적 HTML 경로를 설정
- ModelAndView 타입을 리턴하여 해당 경로에 있는 동적 HTML을 응답 메시지로 보낸다.
@Controller public class ResponseViewController { @RequestMapping("/response-view-v1") public ModelAndView responseViewV1() { ModelAndView mv = new ModelAndView("response/hello") .addObject("data", "ModelAndView hello!"); return mv; } }
Model을 이용한 동적 HTML 응답 메시지 처리
- String을 반환하면 뷰 리졸버가 실행되어 해당 동적 HTML을 찾아 응답 메시지로 보낸다.
@Controller public class ResponseViewController { @RequestMapping("/response-view-v2") public String responseViewV2(Model model) { model.addAttribute("data", "Model hello!!"); return "response/hello"; } }
HTTP API, 메시지 바디에 직접 입력
HTTP API를 제공하는 경우에는 HTML이 아닌 데이터를 전달하기 때문에 HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어서 보낸다.
- HttpServletResponse 이용 - String
- ResponseEntity<String> 이용 - String
- @Responsebody 이용 - String
- ResponseEntity<T> 이용 - JSON
- @Responsebody 이용 - JSON
HttpServletResponse 이용 - String
- HttpServletResponse 객체를 이용하여 HTTP 메시지 바디에 데이터를 실어서 보낸다.
@Slf4j @Controller public class ResponseBodyController { @GetMapping("/response-body-string-v1") public void responseBodyV1(HttpServletResponse response) throws IOException { response.getWriter().write("ok"); } }
ResponseEntity<String> 이용 - String
- HttpEntity를 상속받은 ResponseEntity는 HTTP 메시지의 헤더, 바디의 정보를 조회할 수 있으며
HTTP 응답 코드를 설정할 수 있다. - HTTP 메시지 컨버터를 통해 HTTP 메시지 바디에 데이터를 실어서 보낸다
@Slf4j @Controller public class ResponseBodyController { @GetMapping("/response-body-string-v2") public ResponseEntity<String> responseBodyV2() { return new ResponseEntity<>("ok", HttpStatus.OK); } }
@Responsebody 이용 - String
- HTTP 메시지 컨버터를 통해 HTTP 메시지 바디에 데이터를 실어서 보낸다
@Slf4j @Controller //@RestController public class ResponseBodyController { @ResponseBody @GetMapping("/response-body-string-v3") public String responseBodyV3() { return "@ResponseBody ok"; } }
ResponseEntity<T> 이용 - JSON
- HTTP 메시지 컨버터를 통해 ResponseEntity를 JSON 형식으로 응답 메시지 바디에 실어서 보낸다.
@Slf4j @Controller public class ResponseBodyController { @GetMapping("/response-body-json-v1") public ResponseEntity<UserData> responseBodyJsonV1() { UserData userData = new UserData(); userData.setUsername("userA"); userData.setAge(20); return new ResponseEntity<>(userData, HttpStatus.OK); } }
@Responsebody 이용 - JSON
- HTTP 메시지 컨버터를 통해 해당 객체를 JSON 형식으로 응답 메시지 바디에 실어서 보낸다.
- @ResponseStatus 애노테이션을 통해 응답 코드 설정 가능
@Slf4j @Controller public class ResponseBodyController { @ResponseStatus(HttpStatus.OK) @ResponseBody @GetMapping("/response-body-json-v2") public UserData responseBodyJsonV2() { UserData userData = new UserData(); userData.setUsername("userA"); userData.setAge(20); return userData; } }
참고
@RestController는 ( @Controller + @ResponseBody ) 와 같다.728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 타임리프(Thymeleaf)에 대한 간단한 정리 (0) 2022.01.31 Spring MVC - HTTP 메시지 컨버터 (0) 2022.01.30 Spring MVC - JSON으로 보낸 HTTP 요청 메시지 조회 (0) 2022.01.29 Spring MVC - 단순 텍스트으로 보낸 HTTP 요청 메시지 조회와 HTTP 응답 메시지 처리(@RequestBody, @ResponseBody) (0) 2022.01.29 Spring MVC - HTTP 헤더 조회 (0) 2022.01.28 - 정적 리소스