@Controller와 @RestController의 차이

2021. 1. 31. 03:40·Programming/Spring

@RestController의 동작방식

 

@RestController 는 @Controller 어노테이션과 @ResponseBody 어노테이션을 합쳐놓은 어노테이션이다. 클래스 상단에 @RestController 어노테이션을 선언하면 Method마다 @ResponseBody를 붙여 주지 않아도 된다.

 

즉 

 

 

동일한 동작을 한다고 말할 수 있다.

 

@Controller와 @RestController 방식의 차이점을 알아보자.

 

  • 스프링 Controller는 일반적으로 View Page 이름을 리턴해주어 사용자에게 뷰페이지를 출력하게 해준다. 그림을 보면 어떤 흐름으로 동작하는지 볼 수 있다.

 

 

사용자의 요청이 오면 등록된 ViewResolver를 통해 사용자에게  text/html 타입의 응답을 보내주게 된다.

@Controller public class testController { @Autowired MemberService mservice; // ViewResolver를 통해 사용자에게 text/html 컨텐츠 타입을 리턴 @RequestMapping("/yeah2") public String test1(){ return "test"; }

 

  • 그에반해 @RestController 에서 return 되는 값은 View Page를 통해 출력되는 것이 아니라 HTTP ResponseBody에 직접 쓰여지게 된다.

 

 

사용자의 요청이 오면 MessageConverter를 통해서 application/json, text/plain 등 알맞는 형태로 리턴되게 된다.

@RestController
public class HomeController2 {

	@Autowired
	MemberService mservice;
	private static Logger logger = LoggerFactory.getLogger(HomeController2.class);

	@RequestMapping(value="/register",method=RequestMethod.GET)
	public List<MemberVO> register() throws Exception {
   //MappingJackson2HttpMessageConverter 를 통해서 application/json 컨텐츠 타입을 리턴
		return mservice.selectMember();
	}
    @RequestMapping(value="/register",method=RequestMethod.GET)
	public String texttest() throws Exception {
   // StringHttpMessageConverter 를 통해서 text/plain 컨텐츠 타입을 리턴
		return "text test";
	}

JSON return

text return

 


 

결론

 

 

일반적은 Spring MVC @Controller와 RESTful 컨트롤러인 @RestController의 차이점은 HTTP Response Body가 생성되는 방식이다.

 

@Controller 는 View Page를 반환하지만, @RestController는 객체(VO,DTO)를 반환하기만 하면, 객체데이터는 application/json 형식의 HTTP ResponseBody에 직접 작성되게 된다.

 

'Programming > Spring' 카테고리의 다른 글

[JPA] find date between 날짜 사이 찾기  (0) 2021.02.05
[JPA] Entity와 Repository의 관계, Repository의 기본 메서드/추가 메서드  (0) 2021.02.05
SpringMVC Controller 생성하기  (0) 2021.01.31
@Transactional 이란?  (0) 2021.01.31
@ReqeustBody와 @ResponseBody 언제 사용할까?  (0) 2021.01.31
'Programming/Spring' 카테고리의 다른 글
  • [JPA] find date between 날짜 사이 찾기
  • [JPA] Entity와 Repository의 관계, Repository의 기본 메서드/추가 메서드
  • SpringMVC Controller 생성하기
  • @Transactional 이란?
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (207)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (12)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rotting oranges
    AuthenticationSuccessHandler
    트랜잭션
    fcfs
    Climbing Stairs
    OS
    wildcards
    Reorder List
    Oauth2
    clone graph
    디자인 패턴
    RR
    BFS
    추상화 클래스
    운영체제
    Thread
    @JsonProperty
    @JsonNaming
    준영속 엔티티
    minimum number of arrows to burst balloons
    JSCode
    socar
    Generic
    제네릭
    LinkedList
    algorithm
    Process
    pacific atlantic water flow
    lower bounded wildcards
    runner 기법
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
@Controller와 @RestController의 차이

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.