스프링에는 정적 컨텐츠, mvc패턴, api방식의 3가지 동작 방식이 있다.
여기서 나한테 생소한 방식은 api방식이고, 이거에 대해 좀 알아봐야겠다.
우선 컨트롤러에
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam(value = "name")String name) {
return "hello " + name;
}
이렇게 코드를 작성했다.
여기서 어노테이션 @ResponseBody는 http통신 프로토콜 body에 데이터를 직접 넣어주겠다는 것이다.
그래서 만약 name이 spring이라면
"hello spring"으로 반환 될것이다.
그럼 이전에 템플릿 엔진과의 차이점은 뭘까
이전 템플릿 엔진은 view가 필요했는데
api방식은 데이터 그대로 ("hello spring")를 반환한다.
이번에는 단순 문자열이 아닌, 객체를 반환해보도록 하자
@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;
}
Hello라는 객체를 만들고 리턴 시켰다.
기존의 string은 http 바디에 데이터를 넣어서 보냈었다.
그러나 객체가 오게 되면 HTTP응답을 json응답으로 반환한다.
자세히 말하면 @ResponseBody라는 어노테이션을 보면
스프링에서는 HttpMessageConverter 라는 녀석이 반응을한다.
그래서 반환타입이 string이라면 StringConverter가 일을 하고, 객체라면
JsonConverter가 일을 한다.
객체타입을 보게되면 JsonConverter가 객체를 Json타입으로 바꿔서 클라이언트에게 응답을 한다.