스프링으로 웹개발을 하는 방법에는 세가지가 있다.
정적 컨텐츠, MVC와 템플릿 엔진, 그리고 API.
오늘은 MVC와 템플릿 엔진, 그리고 API에 대해 알아보겠다.
템플릿 엔진이란?
템플릿 엔진이란 view를 통해 렌더링된 html을 클라이언트에게 전달해주는 방식이다.
반면 API는 view 없이 http response에 반환해주는 것.
@RequestParam: 파라미터 받기
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template"; // hello-template.html 로 넘어감
}
@GetMapping("hello-string")
@ResponseBody
public String HelloString(@RequestParam("name") String name) {
// String name 이 그대로 아래 return 뒤 name으로
return "hello " + name;
}
위 GetMapping에서는 페이지 소스를 확인했을 때 html이 뜬다. 즉 템플릿이 있는 상태에서 조작하는 것임.
반면 아래에서는 html 태그 없이 문자만 뜸. 즉 데이터를 그대로 내려줌.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
json 방식으로 나온다.
json은 key, value 형식으로 이루어짐.
@ResponseBody 사용 원리
viewResolver 사용하지 않고 http 응답을 json 방식으로 그대로 넘김.
문자를 넣어줄 경우 http에 넣어 그대로 반환하면 되는데, hello라는 객체가 들어온 경우에는 어떻게 해야 할까?
이때는 json 방식으로 http에 넣어 반환한다는 것이 기본 정책!
( ++ 모두 소문자면 StringConverter, 객체면 JsonConverter)
hello-mvc가 있으면 viewResolver가 return 값에 해당하는 파일 찾아 viewResolver가 html로 변환 후 돌려줌.
객체를 json으로 만드는 라이브러리
기본 객체처리를 위해 MappingJackson2HttpMessageConverter라는 라이브러 사용