@Controller는 스프링 MVC(Model-View-Controller) 프레임워크에서 웹 요청을 처리하는 클래스를 지정하는 어노테이션입니다.
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/list")
public String listUsers(Model model) {
// 사용자 목록을 모델에 추가
model.addAttribute("users", userService.getAllUsers());
return "userList"; // 뷰 이름 반환
}
@PostMapping("/add")
public String addUser(@ModelAttribute User user) {
userService.addUser(user);
return "redirect:/users/list";
}
}
Model, ModelMap, ModelAndView 등을 통해 뷰에 데이터를 전달할 수 있습니다.@RequestMapping 및 관련 어노테이션(@GetMapping, @PostMapping 등)과 함께 사용하여 HTTP 요청을 특정 메서드에 매핑합니다.@Controller는 주로 뷰를 반환하는 전통적인 웹 애플리케이션에 사용됩니다.@RestController는 데이터(주로 JSON)를 직접 반환하는 RESTful 웹 서비스에 사용됩니다.// @Controller 사용 예
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting"; // greeting.html 뷰를 찾아 렌더링
}
}
// @RestController 사용 예
@RestController
public class GreetingApiController {
@GetMapping("/api/greeting")
public Greeting greeting(@RequestParam(name="name", required=false, defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
Model 객체 사용:
@GetMapping("/users")
public String listUsers(Model model) {
model.addAttribute("users", userService.getAllUsers());
return "userList";
}
ModelAndView 사용:
@GetMapping("/users")
public ModelAndView listUsers() {
ModelAndView mav = new ModelAndView("userList");
mav.addObject("users", userService.getAllUsers());
return mav;
}
@ModelAttribute 사용:
@ModelAttribute("globalAttribute")
public String addGlobalAttribute() {
return "This is available to all methods";
}
@Controller는 웹 폼을 쉽게 처리할 수 있습니다:
@GetMapping("/register")
public String showRegistrationForm(Model model) {
model.addAttribute("user", new User());
return "registrationForm";
}
@PostMapping("/register")
public String registerUser(@ModelAttribute User user) {
userService.registerUser(user);
return "redirect:/registrationSuccess";
}
@Controller 내에서 예외 처리를 할 수 있습니다:
@ExceptionHandler(UserNotFoundException.class)
public String handleUserNotFound(UserNotFoundException ex, Model model) {
model.addAttribute("errorMessage", ex.getMessage());
return "error";
}
@Valid를 사용하여 입력 데이터의 유효성을 검사합니다.@Controller는 스프링 MVC의 핵심 어노테이션으로, 웹 애플리케이션의 요청 처리와 뷰 반환을 담당합니다. RESTful API를 구현할 때는 @RestController를 고려할 수 있지만, 전통적인 웹 애플리케이션 개발에는 @Controller가 더 적합합니다.