[Web_3] Spring 2 πŸ…

08627Β·2022λ…„ 9μ›” 16일
1

Spring

λͺ©λ‘ 보기
2/13
post-thumbnail


πŸ“Œ Spring Boot MVC μš”μ²­, 응닡
πŸ“Œ μ„œλ²„ / ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λžœλ”λ§
πŸ“Œ @Controller
πŸ“Œ @ResponseBody
πŸ“Œ @RestController
πŸ“Œ Spring MVC 의 λ™μž‘ κ³Όμ •


πŸ’‘ Spring Boot 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을 λ„£μ–΄μ£Όλ©΄
도메인 μ£Όμ†Œμ°½μ— 값을 μž…λ ₯ν•΄μ„œ λ°›μ•„μ˜¬ 수 μžˆλ‹€.

πŸ’‘ Spring MVC 의 λ™μž‘ κ³Όμ •


μ°Έκ³  πŸ§™
- @Controller와 @RestController 차이
- @Controller vs @RestController


πŸ“’ μ†Œκ° πŸ…

0개의 λŒ“κΈ€