> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/di-5-zhang-gou-jian-spring-web-ying-yong-cheng-xu/untitled-4/untitled-1.md).

# 5.2.2　定义类级别的请求处理

现在，已经为 HomeController 编写了测试，那么我们可以做一些重构，并通过测试来保证不会对功能造成什么破坏。我们可以做的一件事就是拆分 @Request-Mapping，并将其路径映射部分放到类级别上。程序清单 5.7 展示了这个过程。

{% code title="程序清单 5.7　拆分 HomeController 中的 @RequestMapping" %}

```java
package spittr.web;

import static org.springframework.web.bind.annotation.RequestMethod.*;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class HomeController {

  @RequestMapping(method = GET)
  public String home(Model model) {
    return "home";
  }

}
```

{% endcode %}

在这个新版本的 HomeController 中，路径现在被转移到类级别的  @Request-Mapping 上，而 HTTP 方法依然映射在方法级别上。当控制器在类级别上添加@RequestMapping 注解时，这个注解会应用到控制器的所有处理器方法上。处理器方法上的 @RequestMapping 注解会对类级别上的 @RequestMapping 的声明进行补充。

就 HomeController 而言，这里只有一个控制器方法。与类级别的 @Request-Mapping 合并之后，这个方法的 @RequestMapping 表明 home() 将会处理对 `/` 路径的 GET 请求。

换言之，我们其实没有改变任何功能，只是将一些代码换了个地方，但是 HomeController 所做的事情和以前是一样的。因为我们现在有了测试，所以可以确保在这个过程中，没有对原有的功能造成破坏。

当我们在修改 @RequestMapping 时，还可以对 HomeController 做另外一个变更。@RequestMapping 的 value 属性能够接受一个 String 类型的数组。到目前为止，我们给它设置的都是一个 String 类型的 `/`。但是，我们还可以将它映射到对 `/homepage` 的请求，只需将类级别的 @RequestMapping 改为如下所示：

```java
@Controller
@RequesiMapping({"/", "/homepage"})
public class HomeController {
}
```

现在，HomeController 的 home() 方法能够映射到对 `/` 和 `/homepage` 的 GET 请求。
