Spring 기초 - API 방식이란? 개념 + 예제
오늘은 Spring에서 사용하고 있는 API 방식에 대해 포스팅 해보려고 한다.
먼저 URL이 전달이 되면 API 방식에서는 Spring Controller의 @ResponseBody라는 것을 사용한다.  (위 그림 참고)
이후에 MVC 방식에서 viewResolver를 사용하였는데 API 방식에서는 HttpMessageConverter를 사용한다. 
@ResponseBody로 return값을 받으면 
기본 문자처리를 할 때는 StringHttpMessageConverter가 작동을 하고, 
객체 처리를 할 시에는 MappingJackson2HttpMessageConverter이 동작을 한다. 
예시로 TestController.java 파일을 하나 만들고
TestController.java에는 아래와 같이 적어주면 된다. 
package test.testspring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
     static class Test {        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    @GetMapping("test-string")
    @ResponseBody
    public String testString(@RequestParam("name")String name){
        return "test "+name;
    }
    @GetMapping("test-api")
    @ResponseBody
    public Test testApi(@RequestParam("name")String name){
        Test test= new Test();
        test.setName(name);
        return test;
    }
}이런 식으로 작성해주면 
http://localhost:8080/test-spring?name=spring
이라고 url이 오면 name 인자에 spring이 들어가서 
test spring이 html 로 반환되는 것이다. 이것은 string으로 반환이 되었으니 StringConverter를 통해 웹브라우저로 반환이 되었을 것이다. 
반면, 
url이
http://localhost:8080/test-api?name=spring
로 들어오게 되면 
@GetMapping("test-api")이것과 연결되어 test 라는 객체가 반환이 된다. 
여기서 test 라는 객체의 setName 메서드를 통해 name attribute가 spring으로 지정이 된 것이고 이번에는 객체이므로 JsonConverter를 통해 
{name: spring}이라는 형태로 json이 반환되는 것을 알 수 있다. 
