DispatcherServlet이 요청을 intercept -> Handler Mapping을 통해 요청에 맞는 Controller 호출
요청을 처리한 Controller가 응답을 DispatcherServlet에 반환 -> DispatcherServlet은 응답에 해당하는 View를 Client에게 반환 ( @Controller에서 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver에서 설정에 맞는 View를 찾아 렌더링 )
예시 코드
@Controller
public class IndexController {
@GetMapping("/posts/save")
public String postsSave() {
return "posts-save";
}
}
@Controller가 Data를 반환하는 경우
@ResponseBody 어노테이션을 활용 -> Json 형태로 데이터를 반환
이러한 형태로 사용하게 된다면, 모든 메서드에 @ResponseBody Annotation을 넣어줘야 하는 번거로움 존재
@ResponseBody : 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할
예시 코드
@Controller
@RequiredArgsConstructor
public class IndexController {
private final PostsService postsService;
@PostMapping("/post")
public @ResponseBody Posts hello(@RequestBody Posts post) {
String id = post.getId();
return postsService.findById(id);
}
}
@RestController
@RestController = @Controller + @ResponseBody
주용도는 Json 형태로 객체 데이터를 반환하는 것
위의 @Controller가 Data를 반환하는 경우와 같은 케이스를 커버한다고 생각하면 된다.
예시 코드
@RestController
@RequiredArgsConstructor
public class IndexController {
private final PostsService postsService;
@PostMapping("/post")
public Posts hello(@RequestBody Posts post) {
String id = post.getId();
return postsService.findById(id);
}
}
정리하면, Controller에서 view를 반환하는 케이스 이외에 json data를 반환해야 되는 케이스에