@Controller와 @RestContoller의 차이점이 궁금함에도 유사한 기능을 하나보다 하며 넘어갔었습니다.
그런데 역시나.. 기능이 다르다는 걸 알게되었고, 이 참에 그 둘의 차이에 대해서 좀 더 알아보려고 합니다.
먼저 문제가 있던 코드는 아래 코드였습니다.
제 의도는 /login 으로 접속했을 때, template directory에 저장되어 있는 loginForm.html을 view로 보여주는 것이었습니다.그런데 의도와는 다르게
return 해주는 String 값이 화면에 나왔습니다. 보통 이런 경우는 @ResponseBody가 붙어있을 때 나타나는데, 그것도 없고 어떤게 문제일까 생각해보았습니다.
그러다가 @RestController를 @Controller로 바꾸어보았고, 원래 의도대로 loginForm.html이 view로 화면에 나왔습니다.
이 일로 인해 두 annotation에는 큰 차이가 있구나를 깨닫게 되고 덕분에 둘의 차이점에 대해서 알아보는 시간을 가졌습니다.
결론적으로 이 둘의 가장 큰 차이는
@Controller는 주로 view를 반환하기 위해서 사용하고
@RestController는 JSON format으로 객체 data를 반환하기 위해서 사용한다.
입니다.
위에서 제가 겪은 상황에서도 마찬가지였죠?
몇 가지 차이점을 나열해보면 다음과 같습니다.
@Controller | @RestController |
Class를 Spirng MVC Controller로 표시하기 위해 사용한다. | RESTful Web 서비스를 위한 annotation으로 @Controller와 @ResponseBody annotation 두 개를 같이 사용한 것과 동일한 동작을 한다. |
Spring Web MVC view를 리턴한다 | View를 리턴하지는 못한다. |
이번 기회를 통해 둘의 차이를 잘 알게되었고, 앞으로 사용하면서 구체적으로 보여드릴 수 있는 사용예시가 생긴다면 이 포스팅에 업데이트 하도록 하겠습니다. 감사합니다 :)
참고자료
https://mangkyu.tistory.com/49
반응형
'Java Spring > MVC' 카테고리의 다른 글
@Nullable 사용 시 warning 발생 없애기 (0) | 2022.09.09 |
---|---|
Model interface (6) | 2022.08.20 |
em.flush() vs tx.commit() (1) | 2022.07.23 |
Spring Rest Docs 만들기 (1) | 2022.07.19 |
Mockito 적용하여 Controller test 해보기 (0) | 2022.07.18 |