정적 컨텐츠를 제외하면 스프링의 동작 방식에는
의 두가지 방법이 있다.
앞서 정적컨텐츠와 mvc패턴을 배웠으니 이제 api방식에 대해 알아보도록 하겠다.
우선 HelloController에 이렇게 추가해준다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam(value = "name")String name) {
return "hello"+name;
}
여기서 @ResponseBody
애노테이션은 http통신 프로토콜의 body부에 데이터를 직접 넣어주겠다라는 뜻이다.
따라서 만약 name이 string이면 리턴값은 hello string이 되는 것이다.
그렇다면 이전의 템플릿 엔진과의 차이점이 뭘까?
api 방식을 사용하면 리턴시 view(html)가 필요없이 정말 데이터 그대로 "hello string"만 반환된다.
-
위 사진은 api방식
을 이용하여 페이지 소스를 보았을 때이고 아래는 mvc템플릿 방식
을 사용했을때의 페이지 소스이다.
이제 단순 문자열이 아닌 데이터를 반환할 때는 어떤지 보도록 하자. Hello라는 객체를 만들고 이름을 정하고 이를 반환해보도록 하자.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi (@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello { //hello객체
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}
객체를 반환했더니 다음과 같이 json
형태(key:value)로 반환이 되었다.
@RespopnseBody
애노테이션이 붙어있으므로 HttpMessageConverter
가 해당 데이터 (문자열이든 객체이든)를 자료형에 맞게 변환하여 http body에 붙여 응답한다.