@Controller
@Controller는 주로 View를 반환하기 위해 사용
Client -> Dispatcher Servlet -> Handler Mapper -> Controller -> View Resolver -> View -> Client의 구조를 가진다.
@Controller와 @ResponseBody
※이번에는 컨트롤러에서 @Controller가 아닌 @RestController를 사용
-기존에 사용하는 @Controller는주로 View를 반환(String, ModelAndView 등을 통해)하기 위해 사용

1. Client : URI형식으로 웹 서비스 요청
2. DispatcherServlet이 요청을 intercept -> Handler Mapping을 통해 요청에 맞는 controller호출
3. 요청을 처리한 Controller가 응답을 DispatcherServlet에 반환 -> DispatcherServlet은 응답에 해당하는 View를 Client에 반환(@Controller에서 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver에서 설정에 맞는 View를 찾아 렌더링)
@Controller
public class IndexController {
@GetMapping("/posts/save")
public String postsSave() {
return "posts-save";
}
}
-MVC의 컨트롤러에서 Data를 반환해야 하는 경우 @ResponseBody 어노테이션을 활용함. Json형태로 반환 가능
-@ResponseBody : 자바 객체를 HTTP요청의 body 내용으로 매핑하는 역할

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다
3. @ResponseBody를 사용하여 Clioent에게 Json형식으로 데이터를 반환한다.
@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);
}
}
@ResponseBody가 Data를 반환하기 위해서는 viewResolver대신에 HttpMessageConverter가 동작한다.
@RestController
@RestController는 @controller와 @ResponseBody를 합친 것이다.
@Controller의 역할은 Mdoel객체를 만들어 데이터를 담고 View를 찾는 것이지만, @RestController는 단순히 객체만을 반환하고 객체 데이터는 Json, XML, HTTP응답에 담아서 전송한다. 주용도는 Json 형태로 객체를 반환하는 것

1. Client URI 형식으로 웹 서비스에 요청을 보낸다
2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3. RestController는 해당 요청을 처리하고 데이터를 반환한다.
@RestController와 @Controller의 차이점
1. @Controller는 클래스를 Spring MVC컨트롤러로 표시하는데 사용되며, @RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @ResponseBody와 동일하다.
2. @RestController는 Sprint4.0에서 추가되었지만 @Controller는 Spring이 주석을 지원하기 시작한 이후에 존재하며 공식적으로 Spring 2.5버전에서 추가됨
3. @Controller Component주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.
'Back-end > Spring' 카테고리의 다른 글
| [Spring] 쿠키(Cookie)란? (0) | 2022.03.19 |
|---|---|
| [Spring] 세션(session)이란? (0) | 2022.03.19 |
| [Spring] 스프링의 구조(MVC) (0) | 2022.03.19 |
| [Spring] sts3 초기 설정 (0) | 2022.03.07 |
| [Spring] 프로젝트 생성하기 / 톰캣 서버 연동하기 (0) | 2022.03.07 |
댓글