이번 편의 목표: @RestController와 @GetMapping으로 주소와 메서드를 연결하고, 반환 문자열을 응답 본문으로 보냅니다.

03편의 HelloController가 이미 컨트롤러입니다. 이 편에서는 책 API용 컨트롤러를 따로 두고, 공통 주소 앞부분을 클래스에 모읍니다.

클래스에 공통 주소

BookController.java를 추가합니다.

Java
package com.thinktree.library;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping
    public String list() {
        return "등록된 책이 없습니다.";
    }
}

@RestController는 이 클래스의 반환값을 화면 템플릿 이름이 아니라 응답 본문으로 보냅니다. @RequestMapping은 클래스의 모든 메서드 앞에 /api/books를 붙입니다. 메서드의 @GetMapping에 경로를 적지 않으면 GET /api/books 가 list 메서드로 연결됩니다.

서버를 다시 실행하고 http://localhost:8080/api/books 를 엽니다. 등록된 책이 없습니다. 가 보이면 됩니다. /hello와 /fee는 그대로 동작해야 합니다. 컨트롤러가 여러 개여도 주소가 겹치지 않으면 함께 있습니다.

HTTP 메서드는 역할을 나눕니다. 조회는 GET, 등록은 POST, 삭제는 DELETE를 사용할 예정입니다. 같은 주소라도 메서드가 다르면 다른 자바 메서드에 연결할 수 있습니다.

직접 해 보기

GET /api/books/count 를 추가하고 아직 저장소가 없으므로 0을 문자열로 반환하세요.

해설

Java
@GetMapping("/count")
public String count() {
    return "0";
}

전체 주소는 /api/books/count 입니다. 클래스의 /api/books와 메서드의 /count가 이어집니다.