[꼼꼼한 개발자] 꼼코더
23. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 리턴 타입(void 타입, String 타입, 객체 타입) 본문
23. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 리턴 타입(void 타입, String 타입, 객체 타입)
꼼코더 2023. 1. 5. 01:34👨🏻✈️ Controller의 리턴 타입
스프링 MVC 구조가 (기존) 상속, 인터페이스 → (변경) 어노테이션을 사용하는 방식으로 변경된 이후
가장 큰 변화중 하나는 리턴타입이 자유로워졌다는 점이다.
Controller의 메서드가 사용할 수 있는 리턴 타입은 아래와 같다.
- String : jsp를 이용하는 경우 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용.
- void : 호출하는 URL과 동일한 이름의 jsp를 의미.
- VO, DTO 타입 : 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용.
- ResponseEntity 타입 : response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용.
- Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용.
- HttpHeaders : 응답에 내용이 없이 Http 헤더 메세지만 전달하는 용도로 사용.
📭 void 타입
메서드의 리턴 타입을 void로 지정하면 일반적으로 해당 URL의 경로를 그대로 jsp 파일의 이름으로 사용한다.
💁🏻♂️ 결과
SampleController의 경로에 ex05()의 경로를 합쳐 호출 시 결과를 확인한다.
호출 : http://localhost:8080/sample/ex05
‘파일 [/WEB-INF/views/sample/ex05.jsp]을(를) 찾을 수 없습니다.’라는 에러는
servlet-context.xml의 아래 설정과 같이 맞물려 URL 경로를 View로 처리하기 때문에 생기는 결과이다.
💬 String 타입
String 타입은 상황에 따라 다른 화면을 보여줄 때 유용하게 사용한다.(if~else와 같은 처리가 필요한 상황)
String 타입은 현재 프로젝트의 경우 JSP 파일의 이름을 의미한다.
프로젝트 생성 시 기본으로 만들어진 HomeController의 코드를 보면 String을 반환 타입으로 사용하고 있다.
home() 메서드는 ‘home’이라는 문자열을 리턴했기 때문에 경로는 ‘/WEB-INF/views/home.jsp’가 된다.
String 타입에는 다음과 같은 특별한 키워드를 붙여서 사용할 수 있다.
- redirect : 리다이렉트 방식으로 처리하는 경우
- forward : 포워드 방식으로 처리하는 경우
🧱 객체 타입
Controller의 메서드 리턴 타입을 VO(Value Object)나 DTO(Data Transfer Object) 타입 등
복합적인 데이터가 들어간 객체 타입을 지정할 수 있다.
주로 JSON 데이터를 만들어 내는 용도로 사용한다.
👨🏻💻 pom.xml, Controller.java에 코드 추가
실습을 위해 jackson-databind 라이브러리를 pom.xml에 추가한다.
💁🏻♂️ 결과
호출 : http://localhost:8080/sample/ex06
스프링 MVC는 자동으로 프라우저에 JSON 타입으로 객체를 변환해서 전달하게 된다.
개발자 도구를 통해 살펴보면 서버에서 전송하는 MIME타입이 ‘application/json’으로 확인된다.
💬 ResponseEntity 타입
Web을 다루다보면 HTTP 헤더를 다루는 경우가 있다.
스프링 MVC는 ResponseEntity를 통해 원하는 헤더 정보나 데이터를 전달할 수 있다.
👨🏻💻 Controller.java에 코드 추가
ResponseEntity는 HttpHeaders 객체를 같이 전달할 수 있고
이를 통해서 원하는 HTTP 헤더 메시지를 가공하는 것이 가능하다.
ex07()의 경우 브라우저에는 JSON타입이라는 헤더 메시지와 200 OK라는 상태 코드를 전송한다.
💁🏻♂️ 결과
호출 : http://localhost:8080/sample/ex07
🧹 최종 정리
- Controller의 메서드가 사용할 수 있는 리턴 타입은 아래와 같다.
- String : jsp를 이용하는 경우 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용.
- void : 호출하는 URL과 동일한 이름의 jsp를 의미.
- VO, DTO 타입 : 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용.
- ResponseEntity 타입 : response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용.
- Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용.
- HttpHeaders : 응답에 내용이 없이 Http 헤더 메세지만 전달하는 용도로 사용.
위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.