视图控制器
这是一种用于定义 ParameterizableViewController 的快捷方式,调用时会立即转发到视图。当在视图生成响应之前没有 Java 控制器逻辑需要运行时,您可以将其用于静态情况。
以下示例将对 / 的请求转发到名为 home 的视图:
java
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
}kotlin
@Configuration
class WebConfiguration : WebMvcConfigurer {
override fun addViewControllers(registry: ViewControllerRegistry) {
registry.addViewController("/").setViewName("home")
}
}xml
<mvc:view-controller path="/" view-name="home"/>如果 @RequestMapping 方法已映射到任何 HTTP 方法的 URL,则不能使用视图控制器来处理相同的 URL。这是因为通过 URL 与注解控制器匹配被视为足够强的端点所有权指示,因此可以向客户端发送 405 (METHOD_NOT_ALLOWED)、415 (UNSUPPORTED_MEDIA_TYPE) 或类似的响应以帮助调试。出于这个原因,建议避免将 URL 处理分散在注解控制器和视图控制器之间。
补充教学
1. 适用场景
- 首页跳转:如将根路径
/映射到index.html。 - 静态页面路由:对于没有任何业务逻辑的“关于我们”、“声明”等页面,不需要专门写一个
@Controller。 - 状态码映射:可以用来快速定义错误页面跳转。
2. 状态码设置
除了设置视图名称,你还可以设置响应的状态码。例如:
java
registry.addViewController("/old-url").setStatusCode(HttpStatus.MOVED_PERMANENTLY).setViewName("redirect:/new-url");3. 注意事项
视图控制器本质上是配置了一个处理请求的 Handler。如果你的应用是一个纯 REST API(前后端分离),通常不太需要使用视图控制器,因为路由通常由前端框架(如 Vue/React)接管。