@Controller
- 스프링의 전통적인 컨트롤러
- @Component의 구체적인 버전이다.
- MVC 패턴에서의 Controller 역할임을 알려준다.
- classpath scanning을 통해 구현된 클래스를 자동으로 인식할 수 있게 해준다. -> 좀 더 공부 필요
- 주로 @controller와 @RequestMapping을 조합하여 요청 관련 메소드에 사용한다.
- @Controller를 사용하는 요청 관련 메소드에 @ResponseBody를 달아서 HttpResponse로 돌려주도록 만든다.
@RestController
- 스프링 4.0버전에서 처음 소개됐으며, RESTful 웹 서비스를 쉽게 만들수 있도록 해줌
- @Controller의 구체적인 버전이다.
- @RestController는 @Controller와 @ResponseBody를 가지고 있다.
- @RestController를 사용하는 클래스내의 모든 메소드들은 요청에 대한 응답을 HttpResponse로 리턴하도록 한다.
요약
@Controller는 스프링 MVC 패턴에서 controller 역할을 하는 클래스임을 나타내는 어노테이션이며, MVC패턴에서의 전반적인 컨트롤러 역할을 수행한다. 여기서 RESTful API를 쉽게 구성하기 위해 만들어진 Controller가 @RestController다.
@RequiredArgsConstructor
@RestController
public class ApiController {
private final PostsService postsService;
@PostMapping("/api/v1/posts")
public Long save(@RequestBody PostSaveRequestDto requestDto) {
return postsService.save(requestDto);
}
@GetMapping("/api/v1/posts/{id}")
public PostResponseDto save(@PathVariable Long id) {
return postsService.findById(id);
}
}
이 코드를 수행하는 과정에서 @RestController를 @Controller로 적어서 요청을 테스트하는 과정에서 JSON으로 파싱이 불가능하다는 오류 메세지를 확인했다.
@Controller로 요청을 처리하는 과정에서 어떤 데이터가 오가는지까지는 알 수 없었다. 하지만 요청에 대한 정보로 JSON 형태로 데이터를 받아야한다는 것을 알고 있었고 @RestController를 사용해야 JSON 형태로 데이터를 전송할 수 있다는 것을 알았다.
[참고자료]
https://www.baeldung.com/spring-controller-vs-restcontroller
https://www.geeksforgeeks.org/difference-between-controller-and-restcontroller-annotation-in-spring/
'Java > Spring' 카테고리의 다른 글
테스트 코드에서 로그를 찍어보자! (0) | 2023.12.01 |
---|---|
[Spring] getParameter 메소드 (1) | 2023.11.14 |
[Thymeleaf] 타임리프 header와 footer 관리하기 (0) | 2023.09.12 |
o.s.b.d.LoggingFailureAnalysisReporter 에러 해결 (0) | 2023.09.01 |
스프링 3.0과 스프링 시큐리티 6에 대한 정보 (0) | 2023.08.15 |