Spring - 응답방법
스프링은 크게 세가지 방법으로 응답할 수 있습니다.
- 정적 컨텐츠
- MVC 와 템플릿 엔진
- API
정적컨텐츠
html 파일을 return 하는 것입니다.
resources / static / 에서 index.html 과 static.html 을 만들게 되면
8080/ 주소에서 index.html 이 보여지게 되고,
8080/static.html 의 주소는 static.html 이 보여지게 됩니다.
MVC 와 템플릿 엔진
여기부터 spring이 역할을 하게 됩니다.
Controller의 코드를 보겠습니다.
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data","hello!!!!");
return "hello";
}
8080/hello 라는 get 요청을 받으면 hello.html 을 return 합니다.
hello.html 에서 hello 라는 model의 "data" 에 참조가 가능하기 때문에 아래와 같이 사용이 가능합니다.
<p th:text="'안녕하세요.' + ${data} "/>
Params
Parameter를 받는 방법입니다.
@GetMapping("hello/mvc")
public String helloMvc(@RequestParam("name") String name,Model model){
model.addAttribute("name",name);
return "hello-tem";
}
8080/hello/mvc?name=이름 과 같은 형태로 요청이 가능합니다.
@RequestParams("name") 을 통해서 param을 읽을 수 있고 이 값은 name(String)으로 사용가능합니다.
model에 name에서 설정하면 name 을 View 에서 참조가 가능해지게 됩니다.
<p th:text="'안녕하세요.' + ${name} " />
String 반환
@GetMapping("hello/string")
@ResponseBody
public String helloString(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
return "반갑습니다....." + name;
}
@ResponseBody 를 사용하게 되면 http 요청의 본문(body) 가 그대로 전달됩니다.
return 으로 .html를 찾는 것이 아닌 return 뒤 내용이 response 되게 됩니다.
API
return으로 html 이 아닌 JSON으로 넘기는 방법으로 가장 많이 사용하는 방식입니다.
@GetMapping("hello/api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello data = new Hello();
data.setName(name);
return data;
}
static class Hello{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1. Hello 라는 Object 클래스를 만듭니다.
2. Hello 에서 Getter, Setter 를 만들고 name 을 관리할 수 있습니다.
3. Hello 클래스를 상속한 HelloApi를 만들면 , 그 안에서 Hello 클래스를 사용 가능합니다.
4. Hello 클래스를 상속하는 data에 new Hello() 를 이용해 새로운 Object 형식을 만듭니다.
5. setName 으로 { "name": name} 으로 설정해줍니다.
8080/hello/api?name=heyhey 로 요청을 하면 {name:heyhey} 를 응답하게 됩니다.