Search
Duplicate
🚆

Anotated Controller

스프링 MVC는 @Controller@RestController 구성 요소가 요청 맵핑, 요청 입력, 예외 처리 등을 표현하기 위해 주석을 사용하는 주석 기반 프로그래밍 모델을 제공한다.
주석이 달린 컨트롤러는 유연한 메소드 시그니처를 가지고 있으며 기본 클래스를 확장하거나 특정 인터페이스를 구현할 필요가 없습니다.
다음 예제는 주석으로 정의된 컨트롤러다.
@Controller public class HelloController { @GetMapping("/hello") public String handle(Model model) { model.addAttribute("message", "Hello World!"); return "index"; } }
Java
복사
이 예제에서 해당 메소드는 모델을 받아 view의 이름을 String 타입으로 반환한다.

Declaration

서블릿의 WebApplicationContext의 표준 스프링 Bean 정의 기법을 사용하여 컨트롤러 Bean을 정의할 수 있다.
@Controller 타입은 자동 감지를 가능하게 하는데 이는 Spring Container가 클래스 경로에서 @Component를 감지하고 해당 빈 정의를 자동으로 등록해주기 때문이다.
또한 웹 컴포넌트로서의 역할인 컨트롤러임을 나타내는 스테레오 타입으로도 작용한다.
어떠한 @Controller Bean들을 자동 감지를 가능하게 하려면 Java Configuration에 ComponentScan을 추가하면 된다.
@Configuration @ComponentScan("org.example.web") public class WebConfig { // ... }
Java
복사
@RestController@Controller@ResponseBody 어노테이션으로 구성된 복합어노테이션으로 모든 메소드가 @ResponseBody 어노테이션을 상속하므로 HTML 템플릿을 사용한 뷰나 렌더링 대신 응답 본문에 쓰기를 제공한다.
AOP Proxies
몇 몇의 경우, AOP 프록시를 런타임에 적용하기 위해 Controller에 decorator 패턴을 사용할 필요가 있다.
대표적인 예로 @Transaction 어노테이션을 Controller에 적용하는 경우가 있다.
이런 경우에서 컨트롤러들은 구체적으로하기 위해 클래스 기반의 프록시를 추천한다. 이것은 특정 어노테이션을 적용함으로써 자동적으로 적용된다.
만약 인터페이스를 구현하고 있는 컨트롤러인 경우 AOP 프록시가 필요하다면 클래스 기반 프록시를 명시적으로 구성할 필요가 있다.
예를 들어 @EnableTtanscactionManagement의 경우, @EnableTranscationManagement(proxyTargetClass = true)와 같이 말이다.

Mapping Requests

컨트롤러의 메소드에 요청들을 매핑하기 위해 @RequestMapping을 사용하면 된다.
이는 URL, HTTP 메소드, 요청 매개변수, 헤더, 미디어 타입과 매칭하기 위한 다양한 속성들을 가지고 있다.
클래스 수준에서 공유 매핑을 표현하기 위해 사용할 수 있고 메소드 수준에서 더 좁고 구체적인 엔드포인트를 명시하기 위해 사용할 수도 있다.