@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 |