Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

rudu_std

@RestController, @Controller 본문

Spring & Spring Boot

@RestController, @Controller

Ru_Du 2024. 8. 20. 23:53

 

  • @RestController: @Controller와 @ResponseBody를 합친 기능을 말한다. 즉, 단순히 객체만을 반환하고 데이터는 JSON 또는 XML 형식으로 응답을 자동으로 직렬화하여 반환합니다. RESTful 웹 서비스를 구현할 때 주로 사용된다.
  • @Controller: Model 객체를 만들어 데이터를 담고 HTML 뷰를 반환하거나, 다른 뷰 템플릿과 함께 사용될 때,  주로 사용된다. 만약 메서드에서 데이터를 직접 반환하려면 @ResponseBody를 함께 사용해야 한다.
@Controller
@ResponseBody
public class MVCController{
	logic...
}
 
@RestController
public class ReftFulController{
	logic...
}

 

두 코드는 동일하게 작동한다

@RestController는 @Controller와 @ResponseBody의 동작을 하나로 결합한 컨트롤러

 

@Controller와 @RestController의 차이점

  • @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용되고, @RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @Response와 동일하다.
  • @Controller와 @RestController의 주요 차이점 중 하나는 @RestController를 표시하면 모든 메소드가 뷰 대신 객체로 작성된다.
  • @RestController는 데이터를 반환할 때 자동으로 JSON 직렬화가 적용되는 반면, @Controller는 뷰 이름을 반환하여 HTML 페이지를 렌더링한다. 두 어노테이션의 차이는 주로 반환되는 응답의 유형에 따라 결정된다.
  • @Controller는 @Component 주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
}


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}

 

  • @Controller는 @Component를 상속받아 Spring의 컴포넌트 스캔에 의해 자동으로 Bean으로 등록된다.
  • @RestController는 @Controller와 @ResponseBody를 조합하여, RESTful 웹 서비스에서 데이터를 반환하는 데 필요한 기능을 추가한다.

일반적인 Spring MVC Work-flow

[ Controller - View ]

@Controller는 주로 View를 반환하기 위해 사용한다.

아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환된다.

 

@Controller가 View를 반환하기 위해서는 View Resolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링 한다.

[ Controller - Data ]

Spring MVC의 컨트롤러에서도 Data를 반환해야 하는 경우도 있다. 데이터를 반환하기 위해 @ResponseBody 어노테이션을 사용해주면, 이를 통해 Controller도 JSON 형태로 데이터를 반환할 수 있다.

 

 

 

 

[ RestController ]

@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것입니다. 이로써 당연한 것은
RestController의 주용도는 JSON 형태로 객체 데이터를 반환하는 것입니다.

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.3. RestController는 해당 요청을 처리하고 데이터를 반환한다.

 

 

 

 

 

 

 

 

 

출처: https://dev-coco.tistory.com/84 

'Spring & Spring Boot' 카테고리의 다른 글

Spring - Pageable  (0) 2024.09.02
ResponseEntity  (0) 2024.08.25
REST API란 무엇인가?  (0) 2024.08.20
@RequestParam과 @PathVariable  (0) 2024.08.20
@PathVariable과 @RequestParam  (0) 2024.08.20