Spring

Spring - 응답방법

heyheyhey 2022. 9. 14. 11:26
스프링은 크게 세가지 방법으로 응답할 수 있습니다. 
  • 정적 컨텐츠
  • 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} 를 응답하게 됩니다.