在诸如 Thymeleaf、FreeMarker 或 JSP 等视图中,你可以通过参考每个请求映射的隐式或显式分配的名称来建立到注解控制器的链接。
考虑一下下面的例子:
@RequestMapping("/people/{id}/addresses")
public class PersonAddressController {
@RequestMapping("/{country}")
public HttpEntity<PersonAddress> getAddress(@PathVariable String country) { ... }
}
鉴于前面的控制器,你可以从 JSP 中准备一个链接,如下所示:
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
...
<a href="${s:mvcUrl('PAC#getAddress').arg(0,'US').buildAndExpand('123')}">Get Address</a>
前面的例子依赖于 Spring 标签库(即 META-INF/spring.tld
)中声明的 mvcUrl 函数,但要定义你自己的函数或为其他模板技术准备一个类似的函数也很容易。
以下是它的工作原理。在启动时,每个 @RequestMapping
都会通过 HandlerMethodMappingNamingStrategy 分配一个默认名称,其默认实现使用类和方法名称的大写字母(例如,ThingController 中的 getThing 方法变成 TC#getThing
)。如果有名称冲突,你可以使用 @RequestMapping(name="...")
来指定一个明确的名称或实现你自己的 HandlerMethodMappingNamingStrategy。