봄 @Controller
과 봄의 차이@RestController
주석의 .
@Controller
Web MVC 및 REST 애플리케이션 모두에 주석을 사용할 수 있습니까 ?
그렇다면 Web MVC 또는 REST 응용 프로그램인지 어떻게 구별 할 수 있습니까?
답변
@Controller
클래스를 Spring MVC Controller로 표시하는 데 사용됩니다.@RestController
@Controller
및@ResponseBody
주석을 추가하는 것 이상을 수행하지 않는 편리한 주석입니다 ( Javadoc 참조 ).
따라서 다음 두 컨트롤러 정의는 동일하게 수행되어야합니다.
@Controller
@ResponseBody
public class MyController { }
@RestController
public class MyRestController { }
답변
아래 코드에서 차이점을 보여 드리겠습니다. @controller
@Controller
public class RestClassName{
@RequestMapping(value={"/uri"})
@ResponseBody
public ObjectResponse functionRestName(){
//...
return instance
}
}
과 @RestController
@RestController
public class RestClassName{
@RequestMapping(value={"/uri"})
public ObjectResponse functionRestName(){
//...
return instance
}
}
은 @ResponseBody
기본적으로 활성화됩니다. 함수 서명 위에 추가하지 않아도됩니다.
답변
사용 @RestController
하면보기를 반환 할 수 없습니다 ( Viewresolver
Spring / springboot에서 사용 )@ResponseBody
경우 예가 필요하지 않습니다.
사용 @Controller
하면 Spring web MVC에서보기를 반환 할 수 있습니다.
답변
@RestController
어노테이션이있는 클래스는 동일 @Controller
하지만 @ResponseBody
핸들러 메소드에서 내포됩니다.
답변
실제로, 조심하십시오-정확히 동일하지는 않습니다.
당신이 당신의 응용 프로그램 내에서 모든 인터셉터를 정의하면, 그들은 같은 주석 컨트롤러에 적용되지 않습니다 @RestController
하지만 그들은 함께 일을,@Controller
달린 컨트롤러 합니다.
즉. 인터셉터 구성 :
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TemplateMappingInterceptor()).addPathPatterns("/**", "/admin-functions**").excludePathPatterns("/login**");
}
}
스프링 컨트롤러 선언에서 :
@Controller
public class AdminServiceController {...
그러나 작동합니다
@RestController
public class AdminServiceController {...
인터셉터와 연관되지 않습니다.
답변
Spring 문서 ( Spring RestController Documentation ) 에서 볼 수 있듯이 Rest Controller 주석은 Controller 주석과 동일하지만 @ResponseBody가 기본적으로 활성화되어 있다고 가정하면 모든 json이 Java 객체로 구문 분석됩니다.
답변
Spring4 +의 새로운 @RestController 주석은 클래스를 컨트롤러로 표시하여 모든 메소드가 뷰 대신 도메인 객체를 반환합니다. @Controller와 @ResponseBody의 줄임말입니다.