5.2.2 定义类级别的请求处理
现在,已经为 HomeController 编写了测试,那么我们可以做一些重构,并通过测试来保证不会对功能造成什么破坏。我们可以做的一件事就是拆分 @Request-Mapping,并将其路径映射部分放到类级别上。程序清单 5.7 展示了这个过程。
在这个新版本的 HomeController 中,路径现在被转移到类级别的 @Request-Mapping 上,而 HTTP 方法依然映射在方法级别上。当控制器在类级别上添加@RequestMapping 注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的 @RequestMapping 注解会对类级别上的 @RequestMapping 的声明进行补充。
就 HomeController 而言,这里只有一个控制器方法。与类级别的 @Request-Mapping 合并之后,这个方法的 @RequestMapping 表明 home() 将会处理对 /
路径的 GET 请求。
换言之,我们其实没有改变任何功能,只是将一些代码换了个地方,但是 HomeController 所做的事情和以前是一样的。因为我们现在有了测试,所以可以确保在这个过程中,没有对原有的功能造成破坏。
当我们在修改 @RequestMapping 时,还可以对 HomeController 做另外一个变更。@RequestMapping 的 value 属性能够接受一个 String 类型的数组。到目前为止,我们给它设置的都是一个 String 类型的 /
。但是,我们还可以将它映射到对 /homepage
的请求,只需将类级别的 @RequestMapping 改为如下所示:
现在,HomeController 的 home() 方法能够映射到对 /
和 /homepage
的 GET 请求。
Last updated