使用Spring MVC时,大多数情况下我们都是在开发控制器类和控制器方法,也就是那些使用@Controller/@RequestMapping注解的类及其方法,这些控制器类/方法可以用于实现复杂的控制器逻辑,它们最终在应用运行时会用于处理对应的请求。这也算是Spring MVC请求处理业务逻辑开发的常规和主要手段了。但实际上,有时候我们会遇见一些不需要复杂处理的请求,在这些情况下,即使这种常规手段,也会显得复杂,这时候,我们可以考虑使用Spring MVC ViewControllerRegistry的快捷配置,这样我们可以使用少量的代码轻松解决问题。
Spring MVC ViewControllerRegistry快捷配置支持如下几种需求 :
- 针对某些
URL请求只需要返回某个HTTP响应码即可 - 针对某些
URL请求只需要跳转到另外一个URL - 针对某些
URL请求只需要渲染和展示指定视图而无需业务逻辑
现在针对以上三种情况,我们逐一举例演示如何进行快捷配置。
首先需要说明的一点是,本文使用演示项目基于Spring boot + Spring MVC。Spring MVC配置采用如下注解方式:
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 初始化配置 ViewControllerRegistry registry
* 视图控制器的快捷配置方式
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
...
}
}
在以上配置中,方法addViewControllers是对视图控制器进行快捷配置。
接下来,是三种情况快捷配置的例子讲解。
1. 直接返回HTTP代码给指定请求
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
// 请求匹配地址 /absent* 时,响应 HTTP代码403给浏览器端
registry.addStatusController("/absent*", HttpStatus.FORBIDDEN);
}
该例子适用的需求是 : 如果用户访问所有匹配/absent*的地址,我们都向客户端返回HTTP状态码403。
也就是说,如果用户访问服务地址http://xxx/absent /http://xxx/absent.html 等等页面,它会在浏览器页面上看到会是HTTP ERROR 403。这种情况下,连Spring MVC最经典的Whitelable Error Page页面都不会出现。
注意,该例子中的需求并非真实需求,而是出于演示目的的一个假想需求,不要在该例子需求的合理性/真实性上较真。
如下图所示 :

2. 页面跳转
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
// 请求匹配地址 /home* 时,浏览器统一跳转到 /
registry.addRedirectViewController("/home*","/");
}
该例子适用的需求是 : 如果用户访问所有匹配/home*的地址,我们都将他重定向到/。
也就是说,如果用户访问服务地址http://xxx/home /http://xxx/home.html 等等页面,浏览器会自动跳转到http://xxx/。
该例子所演示的页面跳转其实算是一种较为常见的场景,并且如果不使用快捷配置,我们必须在某个控制器类中实现类似如下控制器方法:
@RequestMapping("/home*")
public String redirectToHome() {
return "redirect:/";
}
相比之下,快捷方式设置页面跳转还是简单了许多。
3. 直接视图渲染
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
// 请求匹配地址 /fixed* 时,统一使用视图 fixed_content 进行渲染,
// 并且使用指定视图渲染前,不需要进行业务处理
registry.addViewController("/fixed*").setViewName("fixed_content");
}
该例子适用的需求是 : 用户请求的/fixed*资源某些页面可以直接通过渲染视图fixed_content即可呈现,而无需任何其他的业务处理。
也就是说,如果用户访问服务地址http://xxx/fixed /http://xxx/fixed.html 等等页面,服务端不会执行除了渲染视图fixed_content之外的其它业务逻辑,而仅仅是渲染视图fixed_content并将结果返回给客户端。
相对于以上快捷配置,控制器方法实现直接视图渲染的做法如下 :
@RequestMapping("/fixed*")
public String justView(){
// 注意 : 这里不需要任何业务逻辑,而只需要返回一个需要渲染的视图的名字
return "fixed_content";
}
本文介绍SpringMVC中ViewControllerRegistry的三种快捷配置方法:直接返回HTTP状态码、页面跳转及直接视图渲染,旨在简化常见场景的处理流程。
866





