我正在将Spring MVC与Spring Controllers一起使用。如果URL末尾不存在斜杠,我总是要添加一个斜杠。我该怎么办?
www.mysite.com/something -> www.mysite.com/something/
www.mysite.com/somethingelse/ -> www.mysite.com/somethingelse/
答案 0 :(得分:0)
您可以使用HandlerInterceptor
来实现:
拦截器将检查请求URI是否以斜杠结尾。 如果是这样,则处理请求,否则,将使用相同的URI加上斜杠将响应重定向。 在下面的示例中,我忽略了带有查询字符串的请求,因为我不知道如何处理这种情况。
拦截器:
@Component
public class TrailingSlashInterceptor extends HandlerInterceptorAdapter implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(StringUtils.isBlank(request.getQueryString()) && !request.getRequestURI().endsWith("/")) {
response.sendRedirect(request.getRequestURL().append("/").toString());
return false;
}
return true;
}
}
在您的配置中注册并映射拦截器:
@Autowired
private TrailingSlashInterceptor trailingSlashInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry
.addInterceptor(trailingSlashInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/static/**");
}
我注意到在您的JSP中,如果有的话,则必须使URL以斜杠开头,例如:<c:url value="/clients" />
使用此方法,所有不带斜杠的请求都将被临时重定向(302)到带斜杠的相同URI。