정적 리소스
: 해당 파일을 변경 없이 그대로 서비스하는 것
스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다.
src/main/resources
는 리소스를 보관하는 곳이고, 또 클래스패스의 시작 경로이다.
따라서 다음 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공한다.
만약
src/main/resources/static/basic/hello-form.html
이 경로에 파일이 들어있으면
http://localhost:8080/basic/hello-form.html
웹 브라우저에서 이렇게 실행하면 된다.
기본 뷰 템플릿 경로
src/main/resources/templates
만약
src/main/resources/templates/response/hello.html
이 경로에 파일이 들어있으면
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
이런식으로 뷰템플릿을 반환할 수 있다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data", "hello!!");
return "response/hello";
}
@RequestMapping("/response/hello")
public void responseViewV3(Model model) {
model.addAttribute("data", "hello!!");
}
HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로,
HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.
(참고 : HTML이나 뷰 템플릿을 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달된다. 여기서 설명하는 내용은 정적 리소스나 뷰 템플릿을 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말한다.)
@GetMapping("/response-body-string-v1")
public void responseBodyV1(HttpServletResponse response) throws IOException
{
response.getWriter().write("ok");
}
// HttpEntity, ResponseEntity(Http Status 추가)
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
@ResponseBody
@GetMapping("/response-body-string-v3")
public String responseBodyV3() {
return "ok";
}
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseBodyJsonV1() {
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseBodyJsonV2() {
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return helloData;
}
@RestController
인프런 김영한님의 스프링 MVC 1편의 [섹션6 - Spring MVC 기본기능]
스프링 공식문서 Return Values