5.2.2 定义类级别的请求处理
现在,已经为 HomeController 编写了测试,那么我们可以做一些重构,并通过测试来保证不会对功能造成什么破坏。我们可以做的一件事就是拆分 @Request-Mapping,并将其路径映射部分放到类级别上。程序清单 5.7 展示了这个过程。
程序清单 5.7 拆分 HomeController 中的 @RequestMapping
1
package spittr.web;
2
3
import static org.springframework.web.bind.annotation.RequestMethod.*;
4
5
import org.springframework.stereotype.Controller;
6
import org.springframework.ui.Model;
7
import org.springframework.web.bind.annotation.RequestMapping;
8
9
@Controller
10
@RequestMapping("/")
11
public class HomeController {
12
13
@RequestMapping(method = GET)
14
public String home(Model model) {
15
return "home";
16
}
17
18
}
Copied!
在这个新版本的 HomeController 中,路径现在被转移到类级别的 @Request-Mapping 上,而 HTTP 方法依然映射在方法级别上。当控制器在类级别上添加@RequestMapping 注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的 @RequestMapping 注解会对类级别上的 @RequestMapping 的声明进行补充。
就 HomeController 而言,这里只有一个控制器方法。与类级别的 @Request-Mapping 合并之后,这个方法的 @RequestMapping 表明 home() 将会处理对 / 路径的 GET 请求。
换言之,我们其实没有改变任何功能,只是将一些代码换了个地方,但是 HomeController 所做的事情和以前是一样的。因为我们现在有了测试,所以可以确保在这个过程中,没有对原有的功能造成破坏。
当我们在修改 @RequestMapping 时,还可以对 HomeController 做另外一个变更。@RequestMapping 的 value 属性能够接受一个 String 类型的数组。到目前为止,我们给它设置的都是一个 String 类型的 /。但是,我们还可以将它映射到对 /homepage 的请求,只需将类级别的 @RequestMapping 改为如下所示:
1
@Controller
2
@RequesiMapping({"/", "/homepage"})
3
public class HomeController {
4
}
Copied!
现在,HomeController 的 home() 方法能够映射到对 //homepage 的 GET 请求。
Last modified 2yr ago
Copy link