본문 바로가기

카테고리 없음

[Spring Boot] API

보통 데이터를 내릴 때 두 가지 방식이 있다.

1. 정적 콘텐츠 방식

View를 찾아서 템플릿 엔진을 통해서 html을 웹브라우저에 넘겨주는 방식

2. API 쓰는 방식

API 방식으로 데이터 바로 내리기

@GetMapping("hello-string")
@ResponseBody 
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}
  • @ResponseBody : http에서 header부와 body부가 있는데, body부에 데이터를 넘겨주겠다는 뜻.
  • @ResponseBody를 사용하면 viewResolver를 사용하지 않음.

위 코드를 실행해보면 URL에 파라미터를 주면 View 없이도 그냥 브라우저에 hello name이라고 출력되는 것을 볼 수 있다. View를 통해서 데이터를 보내는 것이 아니라 name자체를 내리는 느낌이다.

그런데 보통 이렇게 쓰지는 않고 밑에 처럼 쓴다.

@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;
    }
}

위 코드가 보편적인 API 방식이다. @ResponseBody를 쓰고 객체를 반환하면 JSON으로 변환된다.

@ResponseBody 사용 원리

스프링 부트에서 @ResponseBody는 요청받은 데이터를 HTTP의 BODY에 그대로 넘겨야 겠다고 해석한다.

데이터가 문자면 StringConverter가 동작하며, 객체면 JsonConverter가 동작하여 JSON 형태로 응답해준다.