스프링 웹개발 기초 - API

장서연·2022년 1월 1일
0

스프링 입문

목록 보기
8/25

컨텐츠를 전달하는 방법에는 크게 두 가지가 있다

  • 템플릿 엔진을 사용하는 방법
  • API

여기서 알아볼 API방식은 View 즉 html 같은 것이 없다.
우선, 달랑 스트링만 반환할 수 있게 해보자. html 템플릿 말고!

달랑 스트링만 반환하는 방법


@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        return "hello";
    }

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
    
    // 달랑 스트링만 반환하는 방식
    @GetMapping("hello-juststring")
    @ResponseBody // 반드시 붙여주어야 한다. HTTP의 Body 에 담아 응답하겠다는 뜻
    public String helloJustString(@RequestParam("name") String name){
        return "hello " + name; // "hello seoyeon"
    }
}

http://localhost:8080/hello-juststring?name=seoyeon

위 주소로 들어가면, html 페이지를 응답받는 것이 아닌, 그냥 달랑 스트링만 응답받게 된다.

정말 그런지 페이지 소스를 봐보자

정말 그렇다.

지금부터는, 정말 데이터를 반환할 수 있게 해보자.

데이터(객체)를 반환하는 방법

json 을 반환해보자!


@Controller
public class HelloController {
   ...

    // 달랑 스트링만 반환하기
    @GetMapping("hello-juststring")
    @ResponseBody
    public String helloJustString(@RequestParam("name") String name){
        return "hello " + name; // "hello seoyeon"
    }

    // 객체 반환
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

http://localhost:8080/hello-api?name=서연이

스프링에서 객체를 반환하면, 기본적으로 json 형식으로 반환해준다.

Response Body 사용 방법

전에, 템플릿을 전달해주는 방식에서는 뷰 리졸버에게 던져주었으나, @ResponseBody가 붙어있는 경우에서는 HttpMessageConverter 에게 던져준다. 즉 @ResponseBody가 붙어있으면 HttpMessageConverter 가 동작하는 것이다.

단순 스트링이라면, StringConverter가 동작하고, 객체라면 JsonConverter가 동작하게 된다.

정리하자면,

  • @ResponseBody 를 붙이면,
    - HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver대신 HttpMessageConverter가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

정리

세가지를 알아봤다
1. 정적 컨텐츠: 그냥 html 파일을 내려줌
2. mvc와 템플릿 엔진: 모델, 뷰, 컨트롤러 방식으로 쪼개서 html을 프로그래밍화 할 수 있음
3. api방식: 클라이언트에게 뷰 없이 객체(json형식의 데이터 등)를 반환할 수도 있다

참고

클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 이 둘을 조합해서 HttpMessageConverter가 선택된다. 더 자세한 내용은 스프링 MVC강의에서!

0개의 댓글