@RestController는 스프링 프레임워크에서 RESTful 웹 서비스를 개발할 때 사용되는 특별한 컨트롤러 어노테이션입니다.
@Controller와 @ResponseBody를 결합한 편의 어노테이션입니다.@ResponseBody가 적용된 것과 동일한 효과를 냅니다.@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// 사용자 조회 로직
return user;
}
@PostMapping
public User createUser(@RequestBody User user) {
// 사용자 생성 로직
return createdUser;
}
}
@Controller는 주로 뷰를 반환하는 전통적인 Spring MVC 컨트롤러에 사용됩니다.@RestController는 데이터를 직접 반환하는 RESTful 웹 서비스에 사용됩니다.// @Controller 사용 예
@Controller
public class WebController {
@GetMapping("/hello")
public String hello() {
return "hello"; // 뷰 이름 반환
}
}
// @RestController 사용 예
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String hello() {
return "Hello, World!"; // 문자열 직접 반환
}
}
@RestController는 다양한 타입의 반환값을 지원합니다:
@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.getAllUsers();
return ResponseEntity.ok(users);
}
@RestController에서의 예외 처리는 @ExceptionHandler나 @ControllerAdvice를 통해 할 수 있습니다:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
}
@RestController는 RESTful 웹 서비스 개발을 크게 간소화합니다. JSON 기반의 API를 쉽게 생성할 수 있게 해주며, 스프링의 강력한 기능들과 결합하여 효율적인 백엔드 서비스 구축을 가능하게 합니다.