사용할 수 있는 주요 리턴 타입
- String : jsp 이용할 경우
- void : 호출 URL과 동일한 이름의 jsp
- VO, DTO : 주로 JSON타입 데이터를 만들어 반환하는 용도.
- ResponseEntity : response할 때 Http 헤더 정보와 내용을 가공하는 용도
- Model, ModelAndView : 모델로 데이터를 반환하거나 화면까지 같이 지정하는 경우 (최근에는 많이 사용하지 않는다.)
- HttpHeaders : 응답에 내용 없이 Http 헤더 메시지만 전달하는 용도로 사용한다.
해당 URL 경로를 그대로 jsp파일의 이름으로 사용하게 된다.
@GetMapping("/ex05")
public void ex05(){
log.info("/ex05.........");
}
호출해 보면 ex05.jsp 파일이 없다는 오류가 나타난다. 이는 servlet-context.xml 파일의 InternalResourceViewResolver 사용 태그에서 prefix와 suffix 설정을 해두었기 때문이다.
상황에 따라 다른 화면을 보여줄 필요가 있을 경우 유용하게 사용한다. 일반적으로 String은 JSP파일의 이름을 의미한다.
String 타입에는 다음 키워드를 붙여 사용할 수 있다.
- redirect : 리다이렉트 방식
- forward : 포워드 방식
VO나 DTO타입으로 지정할 경우 주로 JSON 데이터를 만들어내는 용도로 사용한다.
이를 위해서는 먼저 jackson-databind 라이브러리를 pom.xml에 추가한다.
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
SampleController.java
@GetMapping("/ex06")
public @ResponseBody SampleDTO ex06() {
log.info("/ex06............");
SampleDTO dto = new SampleDTO();
dto.setAge(10);
dto.setName("홍길동");
return dto;
}
스프링 MVC는 자동으로 브라우저에 JSON타입으로 객체를 변환해 전달한다.

HttpServletRequest나 HttpServletResponse를 직접 핸들링하지 않아도 HTTP 프로토콜의 헤더를 다룰 수 있다.
@GetMapping("/ex07")
public ResponseEntity<String> ex07(){
log.info("/ex07.............");
//{"name": "홍길동"}
String msg = "{\"name\": \"홍길동\"}";
HttpHeaders header = new HttpHeaders();
header.add("Content-Type", "application/json;charset=UTF-8");
return new ResponseEntity<>(msg, header, HttpStatus.OK);
}
ResponseEntity는 HttpHeaders 객체를 같이 전달해 HTTP 헤더 메시지를 가공할 수 있다.