首页 新闻 搜索 专区 学院

为什么Spring Web会自动为控制器方法匹配的url模式末尾添加“/”,但是不会对拦截器这么做?

0
悬赏园豆:5 [待解决问题]

下面是一个例子。
控制器方法:
@GetMapping(path="/home")
public String home() {
log.info("Controller method home() was called.");
return "home";
}
拦截器:
@Slf4j
@Component
public class HomeInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
log.info("Method HomeInterceptor.preHandle() was called.");
}
}
网络设置:
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(@NotNull InterceptorRegistry registry) {
register.addInterceptor(new HomeInterceptor()).addPathPatterns("/home");
}
}
配置里主页控制器和主页拦截器匹配的url都是“/home”,实践发现,访问“/home”,控制器方法home()和拦截器HomeInterceptor都会处理该请求,服务器控制台会打印出两条语句:“Controller method home() was called.”和“Method HomeInterceptor.preHandle() was called.”;访问“/home/”,只有控制器方法home()会处理该请求,拦截器HomeInterceptor不会处理该请求,服务器控制台只会打印一条语句:“Controller method home() was called.”。
使用的Spring Boot版本是2.5.3。
使用时感到有些困惑,为什么Spring Web在对控制器方法和拦截器的url匹配会有这样的不同呢?

Halloworlds的主页 Halloworlds | 菜鸟二级 | 园豆:209
提问于:2021-10-08 22:05
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册