🎯 학습 목표
- @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)를 만들어 타입 안전하게 주고받습니다.