[Spring]Controller의 리턴 타입

윤재열·2022년 4월 5일
0

Spring

목록 보기
49/72
post-custom-banner

Controller의 리턴타입

  • 스프링 MVC의 구조가 기존의 상속과 인터페이스에서 어노테이션을 사용하는 방식으로변한 이후에 가장 큰 변화 중 하나는 리턴 타입이 자유로워 졌다는 점입니다.

Controller의 메서드가 사용할 수 있는 리턴 타입

  • String : jsp를 이용하는 경우에는 jsp파일의 경로와 파일이름을 나타내기 위해서 사용합니다.
  • void : 호출하는 URL과 동일한 이름의 jsp를 의미합니다.
  • VO,DTO 타입 : 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용합니다.
  • ResponseEntity 타입 : response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용합니다.
  • Model,ModelAndView : Model로 데이터를 반환하거나 화면까지 지정하는 경우에 사용합니다.
    (최근에는 많이 사용하지 않습니다.)
  • HttpHeaders : 응답에 내용 없이 Http 헤더 메시지만 전달하는 용도로 사용합니다.

void 타입

  • 메서드의 리턴 타입을 void로 지정하는 경우 일반적인 경우에는 해당 URL의 경로를 그대로 jsp파일의 이름으로 사용하게 됩니다.
@GetMapping("/ex05")
public void ex05(){
log.info("/ex05....");
}

servlet.context.xml

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
  • /WEB-INF/views/ = prefix(접두사)
  • .jsp = suffix(접미사)
  • Ex) /WEB-INF/view/ex05.jsp

String 타입

  • String타입은 상황에 따라 다른 화면을 보여줄 필요가 있을때 유용하게 사용합니다.(if~else같은 처리가 필요할때)
  • 일반적으로 String 타입은 현재 프로젝트의 경우 JSP파일의 이름 또는 HTML파일의 이름을 의미합니다.)
  • String 타입에는 다음과 같은 특별한 키워드를 붙여서 사용이 가능합니다.
    -redirect: 리다이렉트 방식을 처리하는 경우
    -forword : 포워드 방식으로 처리하는 경우

객체 타입

  • Controller의 메서드 타입을 VO(Value Object)나 DTO(Data Transfer Object)타입 등 복합적인 데이터가 들어간 객체 타입으로 지정할 수 있습니다.
  • 이경우는 주로 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에는 아래와 같이 사용할 수 있습니다.
@GetMapping("/ex06")
	public @ResponseBody SampleDTO ex06() {
		log.info("/ex06.....");
		
		SampleDTO dto =new SampleDTO();
		dto.setAge(10);
		dto.setName("홍길동");
		
	return dto;
	}
  • 스프링 MVC는 자동으로 브라우저에 JSON 타입으로 객체를 변환해서 전달하게 됩니다.

  • 개발자 도구를 통해서 살펴보면 서버에서 전송하는 MIME 타입이 'application/sjon'으로 처리되는 것을 확인할 수 있습니다.

ResponseEntity 타입

  • Web을 다루다 보면 HTTP 프로토콜의 헤더를 다루는 경우도 종종 있습니다.
  • 스프링 MVC의 사상은 HttpServletRequest나 HttpServletResponse를 직접 핸들링 하지 않아도 이런 작업이 가능하도록 작성 되었기 때문에 이러한 처리를 위해 ResponseEntity를 통해서 원하는 헤더 정보나 데이터를 처리할 수 있습니다.
@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 헤더 메시지를 가공하는 것이 가능합니다.
  • ex07() 같은 경우 브라우저에는 JSON타입이라는 헤더 메시지와 200 OK 라는 상태 코드를 전송합니다.


profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글