이 전에는 JSP로 모든 것을 통합하여 하였지만 (Model 1방식) 현재는 각각 나누어서 작성하고있다.
1. 웹 브라우저는 내장 톰캣 서버로 localhost:8080/hello-mvc를 요청
2. 내장 톰캣 서버는 스프링 컨테이너에게 hello-mvc
를 넘김
3. 스프링 컨테이너는 HelloController
에 GetMapping
되어있는 hello-mvc
를 찾음
4. key = name, value = spring
값을 model(name:spring)
에 담아 return 함
5. viewResolver는 리턴된 string name
과 똑같은 name을 찾아서 Thymeleaf 템플릿 엔진에게 처리해달라고 요청을 해달라고 넘김
6. 템플릿 엔진은 변환을 한 HTML을 웹 브라우저로 넘김
@ResponseBody
를 사용하면 뷰 리졸버 ( viewResolver )
를 사용하지 않음
view 부분 없이 처리된다.
@GetMapping("hello-string")
@ResponseBody // HTTP body 부분에 return 으로 넘어가는 부분을 직접 넣겠다는 의미이다.
public String helloString(@RequestParam("name") String name) {
return "hello" + name; // "hello spring"
}
→ 페이지 소스보기를 하면 HTML 소스 부분이 없이 그대로 넘어온다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
viewResolver
대신에 HttpMessageConverter
가 동작StringHttpMessageConverter
MappingJackson2HttpMessageConverter