Spring Boot

Spring Boot 강좌 02강 — REST API 기초: @RestController와 매핑

🎯 학습 목표

  • @RestController로 HTTP 엔드포인트를 만든다.
  • 경로 변수·쿼리 파라미터·요청 본문을 받는다.
  • JSON 응답을 반환한다.

📖 개념 설명

REST API는 URL과 HTTP 메서드(GET/POST/PUT/DELETE)로 자원을 다루는 방식입니다. Spring에서는 @RestController를 붙인 클래스의 메서드가 각 엔드포인트가 되고, 반환한 객체는 자동으로 JSON으로 변환됩니다.

💻 실습 — 다양한 입력 받기

@RestController
@RequestMapping("/api")
public class HelloController {

    // GET /api/hello
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot!";
    }

    // 경로 변수: GET /api/users/42
    @GetMapping("/users/{id}")
    public String getUser(@PathVariable Long id) {
        return "user id = " + id;
    }

    // 쿼리 파라미터: GET /api/search?q=spring&page=2
    @GetMapping("/search")
    public String search(@RequestParam String q,
                         @RequestParam(defaultValue = "1") int page) {
        return "q=" + q + ", page=" + page;
    }

    // 요청 본문(JSON): POST /api/echo  { "name": "kim" }
    @PostMapping("/echo")
    public Map echo(@RequestBody Map body) {
        return Map.of("received", body.getOrDefault("name", "?"));
    }
}

💻 테스트

curl http://localhost:8080/api/hello
curl http://localhost:8080/api/users/42
curl "http://localhost:8080/api/search?q=spring&page=2"
curl -X POST http://localhost:8080/api/echo 
  -H "Content-Type: application/json" -d '{"name":"kim"}'

⚠️ 주의사항

  • @RestController는 JSON을 반환합니다. HTML 뷰를 반환하려면 @Controller를 씁니다.
  • @RequestBody는 Content-Type이 application/json이어야 정상 동작합니다.

💡 팁

  • 응답 상태코드까지 제어하려면 ResponseEntity를 반환하세요(예: 201 Created).
  • 실제로는 Map 대신 DTO 클래스(record)를 만들어 타입 안전하게 주고받습니다.