클라이언트의 요청에 대한 response는 크게 2가지가 있다.
1. html
2. api
앞에서는 html을 response하는 것에 대해 다뤄보았고 이번에는 api를 제공해 줄것이다.
HelloController에 다음 내용을 추가하자
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
페이지의 소스를 확인하면 다음과 같이 출력된다. 단순하게 string이 출력되는 것을 확인할 수 있다.
다음으로 string대신 json을 response해보자.
HelloController안에 다음 내용을 추가하자
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) { //param으로 입력 받음
Hello hello = new Hello();
hello.setName(name);//입력받은 name을
return hello; //hello 객체 반환
}
static class Hello { //hello 객체
private String name; //key값
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
서버를 실행하여 view-source:http://localhost:8080/hello-api?name=%EC%8A%A4%ED%94%84%EB%A7%81 에 접속하면 다음과 같이 출력된다.
두 케이스 모두 controller에 @ResponseBody
가 붙어 있는 것을 볼 수 있다. 이 태그를 붙이면 HTTP의 body에 문자를 직접 반환한다. 이 경우 viewresolver대신 HttpMessageConverter가 동작하는데 default로는 기본 문자 처리의 경우에StringHttpMessageConverter
가, 기본 객체 처리에 MappingJackson2HttpMessageConverter
가 동작한다.