RestController 와 Controller 를 이용하기 위해서는 어떻게 할까?
스프링 부트 백엔드 개발자 되기 책을 참고하며 클론코딩을 하다가 발견한 문제였습니다.
주어진 상황
- 템플릿 엔진도 build 에 추가 안하고 resource 도 index 밖에 없던 상황이었습니다. Controller 파일을 만들어 GetMapping 으로 /test 로 리턴값 "test" 를 전달해줘야 했습니다.
문제 상황
- Controller 파일을 생성하고 @Controller 애노테이션을 붙여 localhost/test 로 보내려는 찰나에
Whitelabel Error Page
가 떴습니다.
고민
- 일단 @Controller 로 실행을 시키기 위해서는 어떻게 해야할까 생각하다가 test.html 파일을 만들어야 한다는 사실을 알고 있었습니다. 뷰로 보내기 때문이죠 그래서 파일을 만들고 실행을 시켜도 안됐습니다. 알고보니 @RestController 를 사용했던 것이었습니다. 그래서 검색을 해보니 RestController 는 Rest API 개발할 때 사용하고 JSON 으로 데이터를 보내는 역할을 하더라구요. 뭔가 RestController 를 사용하고 넘어가기엔 찝찝했습니다.
그래서 ChatGPT 의 도움을 좀 받았습니다 ^_^
문제 해결
- 알고보니 Controller 에서 뷰를 반환하기 위해서 는 동적 페이지이기 때문에 템플릿 엔진 ( Thymleaf, JSP )과 함께 사용이 필수입니다. 타임리프 의존성을 추가하니 잘 동작하더라구요
//RestController
//@Controller:
//
//주로 뷰 이름을 반환.
//템플릿 엔진(예: Thymeleaf, JSP)과 함께 사용됨. !!
//예: "test"는 test.html 같은 뷰 템플릿을 렌더링하려고 시도.
//@RestController:
//
//메서드의 반환값을 HTTP 응답 본문으로 직렬화.
//주로 REST API를 개발할 때 사용.
//예: "test"는 클라이언트에게 그대로 응답으로 반환됨.
아직 멀었지만 저의 궁금증이 풀렸습니다!!
꿀팁 하나 얻었어요
@RestController 에 마우스를 대고 커맨드 + 클릭 하시면
요 함수는 @ Controller + @ResponseBody 와 함께 사용하는 것을 볼 수 있네요
자세한 건 링크 남기고 갑니다.
https://cheershennah.tistory.com/179
[Spring] @RequestBody / @ResponseBody 어노테이션 이란?
스프링에서 비동기 처리를 하는 경우 @RequestBody , @ResponseBody를 사용한다. 비동기 처리를 위해 이 어노테이션들은 어떻게 작동할까? 클라이언트와 서버의 비동기 통신 클라이언트에서 서버로 통
cheershennah.tistory.com