Spring Boot에서 Controller를 작성하려면, 주로 MVC 패턴을 따라 HTTP 요청을 처리하고, 필요한 데이터를 반환하거나 뷰를 렌더링한다.
@ControllerModel 또는 ModelMap 객체를 활용한다.@Controller
@RequestMapping("/home")
public class HomeController {
@GetMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("message", "Welcome to Spring Boot!");
return "welcome"; // welcome.html 렌더링
}
}
@RestController@Controller + @ResponseBody 역할을 수행한다.@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/data")
public Map<String, String> getData() {
Map<String, String> response = new HashMap<>();
response.put("status", "success");
return response; // JSON 반환
}
}
@RequestMapping@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/profile", method = RequestMethod.GET)
public String userProfile() {
return "profile"; // profile.html 반환
}
}
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping@GetMapping : GET 요청@PostMapping : POST 요청@PutMapping : PUT 요청@DeleteMapping : DELETE 요청@RestController
@RequestMapping("/items")
public class ItemController {
@GetMapping("/{id}")
public String getItem(@PathVariable int id) {
return "Item ID: " + id;
}
@PostMapping
public String createItem(@RequestBody String item) {
return "Created Item: " + item;
}
}
@PathVariable@GetMapping("/products/{id}")
public String getProduct(@PathVariable("id") int productId) {
return "Product ID: " + productId;
}
@RequestParamrequired = false는 필수값이 아니게 된다.defaultValue로 해당 쿼리 파라미터가 존재하지 않을 때 디폴트 값을 설정할 수 있다.@GetMapping("/search")
public String search(
@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "age", required = false, defaultValue = "20") String age
) {
return "name: " + name + "age: " + age;
}
@RequestBody@PostMapping("/orders")
public String createOrder(@RequestBody Order order) {
return "Order created: " + order.getId();
}
@ResponseBody@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, World!";
}
@SessionAttributes@Controller
@SessionAttributes("username")
public class SessionController {
@GetMapping("/login")
public String login(Model model) {
model.addAttribute("username", "JohnDoe");
return "loginView";
}
@GetMapping("/welcome")
public String welcome(@ModelAttribute("username") String username) {
return "Welcome, " + username;
}
}
@ExceptionHandler@ControllerAdvice로 전역 처리 가능하다.@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleException(IllegalArgumentException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
addAttribute() 메소드로 데이터를 추가한다.@GetMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("message", "Welcome!");
return "welcome";
}
Model과 유사하지만, Map 기반으로 동작한다.ModelMap은 클래스로, Model과 내부적으로 사용하는 객체 타입과 메서드 모두 동일하다.@GetMapping("/info")
public String info(ModelMap modelMap) {
modelMap.addAttribute("version", "1.0");
return "infoView";
}
setAttribute로 데이터를 저장한다.@GetMapping("/setSession")
public String setSession(HttpSession session) {
session.setAttribute("user", "JohnDoe");
return "Session set for JohnDoe";
}
@GetMapping("/clientInfo")
public String clientInfo(HttpServletRequest request) {
return "Client IP: " + request.getRemoteAddr();
}