
@Controller
- 일반적인 Spring MVC 컨트롤러
- 주로 view 를 반환하기 위하여 사용됨
View 반환
Return Type 은 String 으로 설정한다
return 에 들어오는 경로의 화면을 View Resolver 를 통해 반환한다
@Controller
@RequestMapping("/main")
public class MainController {
    @GetMapping(value = "/index")
    public String index(){
        return "/user/index";
    }
}
요청 처리 과정
1. Client 에서 URI 형식으로 요청
2. DispatcherServlet 에서 요청을 처리할 대상 조회
3. HandlerAdapter 를 통해 요청을 Controller 로 위임
4. Controller 에서 서비스로직 실행 후 view 반환
5. DispatcherServlet 은 ViewResolver 를 통해 View 를 찾아 반환
View + Data 반환
Return Type 은 String 으로 설정한다
model 에 들어있는 data를 view와 함께 반환한다
@Controller
@RequestMapping("/main")
public class MainController {
    @GetMapping(value = "/index-model")
    public String indexModel(Model model){
        model.addAttribute("user", "");
        return "/user/index";
    }
    @GetMapping(value = "/index-param")
    public String indexParam(Model model, @RequestParam("userName") String userName){
        model.addAttribute("user", userName);
        return "/user/index";
    }
}
요청 처리 과정
1. Client 에서 URI 형식으로 요청
2. DispatcherServlet 에서 요청을 처리할 대상 조회
3. HandlerAdapter 를 통해 요청을 Controller 로 위임
4. Controller 에서 서비스로직 실행 후 view 와 Data 를 함께 반환
Data 반환
페이지 이동없이 데이터만 Json 객체로 반환한다
@Controller
@RequestMapping("/main")
public class MainController {
    @GetMapping(value = "/index-rest")
    public @ResponseBody ResponseEntity indexRest() {
        //json type으로 반환하기 위하여 @ResponseBody 어노테이션이 필요함
        return ApiResponseEntity
                .builder()
                .ok();
    }
}
하지만 이런 경우 @Controller 를 쓰기보단 아래의 @RestController 어노테이션을 사용한다
@RestController
- RestFul 웹서비스의 컨트롤러
- @Controller + @RequestBody 의 기능을 한다
- ResponseEntity 형식으로 return
ㄴ HttpStatus, data 를 Json 객체로 반환
Data 반환
페이지이동 없이 Data 만 Json 객체로 반환한다
아래 코드의 경
@RestController
@RequestMapping("/api/main")
public class MainRestController {
    @ResponseBody
    @GetMapping("")
    public ResponseEntity index() {
        return ResponseEntity
                .ok();
    }
}
요청 처리 과정
1. Client 에서 URI 형식으로 요청
2. DispatcherServlet 이 요청을 처리
3. HandlerAdapter 를 통해 요청을 Controller로 위임
4. Controller 에서 서비스로직 실행 후 객체 반환
5. 반환 시 Json 으로 Serialize 되어 Client 로 반환
viewResolver 필요한 프로젝트는 @Controller
api기능만 사용할 프로젝트는 @RestController 사용하면 된다!

'BackEnd > JAVA' 카테고리의 다른 글
| Spring boot Multi module Project (2) - 프로젝트 실행 (1) | 2024.01.22 | 
|---|---|
| Spring boot Multi module Project (1) - 스프링 멀티모듈 프로젝트 생성 (0) | 2024.01.22 | 
| @Component, @Configuration, @Bean (1) | 2024.01.02 | 
| @RequestParam, @RequestBody, @ResponseBody (0) | 2024.01.01 | 
| @MappedSuperClass @inherited @Embadded 상속정리 (0) | 2023.02.11 |