π Spring Boot MVC μμ², μλ΅
π μλ² / ν΄λΌμ΄μΈνΈ μ¬μ΄λ λλλ§
π @Controller
π @ResponseBody
π @RestController
π Spring MVC μ λμ κ³Όμ
Springμμλ MVCμ ꡬνμ μν΄ μ»¨νΈλ‘€λ¬ ν΄λμ€μ @Controller λλ @RestController μ΄λ Έν μ΄μ μ λ¨λ€.
@Controller λ HTML, JSP νμΌ λ±μΌλ‘μ Response νκ³ ,
@RestController λ String, Json λ±μ κ°μ²΄λ₯Ό Response νλ€.
β» @Controllerμ μ¬μ©νμ λ κ°μ²΄λ‘μ μλ΅νκ³ μΆλ€λ©΄, @ResponseBody μ΄λ
Έν
μ΄μ
μ ν¨κ» μ¬μ©ν μ μλ€. (κ·Όλ° κ·Έλ΄ νμ μμ΄ @RestController μ¨μ£Όλ©΄ λλ κ²μπ)
μ΄λ¬ν μ°¨μ΄μ μΌλ‘ @Controller μ΄λ
Έν
μ΄μ
μ μΉ νμ΄μ§ ( View ) λ₯Ό λμμ£Όλ 컨νΈλ‘€λ¬ ν΄λμ€μ λ¬μμ£Όκ³ ,
μμ² μ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νκΈ° μν΄ μλΉμ€ ν΄λμ€μ κ°μ²΄λ₯Ό μ£Όκ³ λ°κ³ νλ 컨νΈλ‘€λ¬ ν΄λμ€μλ @RestController μ΄λ
Έν
μ΄μ
μ λ¬μμ£Όμ΄ λ 컨νΈλ‘€λ¬ ν΄λμ€λ₯Ό ꡬλΆνλ€.
π¦ μλ² μ¬μ΄λ λλλ§
μλ² μΈ‘μμ Controller & Model λ‘ ν΄λΌμ΄μΈνΈμ μμ²μ λ°μ μ²λ¦¬ν ν, HTML μ½λλ₯Ό λλλ§νμ¬ View λ₯Ό λμμ£Όλ λ°©μ
μμ² λ§λ€ HTML μ½λλ‘ μλ΅νκ² λ¨.
π¦ ν΄λΌμ΄μΈνΈ μ¬μ΄λ λλλ§
μλ²λ ν΄λΌμ΄μΈνΈμ μμ² λ§λ€ λ°μ΄ν° κ°μ²΄λ₯Ό μ 곡νκ³ , ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ ) μΈ‘μμ μλ΅λ°μ 리μμ€λ§μ κ°μ§κ³ μ²λ¦¬νλ€.
π· PageController.java
@Controller
public class PageController {
// λ μ€ μ무거λλ‘ λ€μ΄μλ λ©μλ μ€νλ¨
// Handler Mapping μ uri λ₯Ό λ±λ‘ν΄μ£Όλκ² GetMapping ,
// κ·ΈλΌ Dispatcher κ° uri λ₯Ό λ°μμ μ°κ²°...
@GetMapping({"/", "/index"})
public String loadIndex(Model model) { // Controller κ° Model κ°μ²΄λ₯Ό 맀κ°λ³μλ‘ λ°μμ μ λ¬νκ³ ,
model.addAttribute("name", "κ°±λ");
return "index"; // index viewλ₯Ό μ°Ύμμ νμ΄μ§μ λμμ€
}
// ν΄λΉ url μμ² μ λ©μλ μ€νμ΄ λκ³ ,
// hello λΌκ³ νλ view λ₯Ό λμμ€λ€.
// κ·Έ κ³Όμ μμ model μ 맀κ°λ³μλ‘ λ°μμ κ°μ΄ 보λ΄μ€λ€.
@GetMapping("/helloboot")
public String loadModelToBoot(Model model) {
model.addAttribute("nowDate", LocalDateTime.now());
return "hello";
}
@GetMapping("/myinfo")
public String loadMyInfo(Model model) {
model.addAttribute("name", "짱ꡬ");
model.addAttribute("age", "5");
model.addAttribute("phone", "null");
model.addAttribute("address", "μΉ΄μ€μΉ΄λ² μ");
return "myinfo";
}
}
β‘οΈ HTML λ¬Έμλ‘ λ°μμ΄
Model κ°μ²΄λ Controllerμμ Viewμ κ°μ λκ²¨μ€ λ μ΄μ©νλ κ°μ²΄μ΄λ€.
Model κ°μ²΄μ λ°μ΄ν°λ₯Ό λ΄μ Viewμ μ μ©ν΄ Viewλ₯Ό λ°ννλ κ².
π· ResponseBodyController.java
// @Controller
@Slf4j
@RestController
public class ResponseBodyController {
// @ResponseBody
@GetMapping("/api/text")
public String textGetReq(@RequestParam("value") String value, @RequestParam int num) {
return "νλΌλ―Έν° κ°: " + value + "," + num;
}
@PostMapping("/api/text")
public String textPostReq(@RequestParam String name, int age) {
log.info("name: {}, {}, {}, {}", name, age, name, age);
log.info("age: {}", age);
return "name: " + name + ", age: " + age;
}
@PutMapping("/api/text")
public String textPutReq() {
log.info("put Request!");
return "Put μμ²μ λν μλ΅";
}
@DeleteMapping("/api/text")
public String textDeleteReq() {
return "Delete μμ²μ λν μλ΅";
}
}
β‘οΈ ν
μ€νΈλ‘ λ°μμ΄
λ¨μν κ°μ²΄ κ·Έ μ체λ§μ λ°νν¨.
λ©μλμ νλΌλ―Έν° κ°μ @RequestParamμ λ£μ΄μ£Όλ©΄
λλ©μΈ μ£Όμμ°½μ κ°μ μ
λ ₯ν΄μ λ°μμ¬ μ μλ€.
μ°Έκ³ π§
- @Controllerμ @RestController μ°¨μ΄
- @Controller vs @RestController
π’ μκ° π