使用Spring进行精确的RequestMapping

我在Spring中有以下内容

@RequestMapping("/hello") 

但是Spring会自动为/ hello /和/hello.*添加映射。 如何进行确切的URL匹配?

只有/你好应该工作,其他任何东西都应该404

RequestMappingHandlerMapping上关闭后缀匹配( useSuffixPatternMatch )将解决您的问题,但如果您在配置中使用 (而不是手动连接所有必需的基础架构bean),这样做实际上并不那么容易。 在这种情况下,定义RequestMappingHandlerMapping类型的附加bean将不起任何作用。

你有两个选择:

  1. 删除将其扩展为一组等效的bean定义,您可以在其中应用useSuffixPatternMatch设置。

  2. 保持 ,并使用更简单的解决方法: https : //jira.springsource.org/browse/SPR-9371 。 这基本上添加了一个BeanPostProcessor ,它检索由mvc命名空间创建的RequestMappingHandlerMapping bean,并设置上面提到的标志。

还有另一张票要求自定义由mvc名称空间创建的RequestMappingHandlerMapping而不应用上述黑客攻击应该更容易。 您可以考虑对此票证进行投票。

如果您使用的是版本3.1 / 3.2,则无需注释或删除即可尝试此操作

写一个后处理器

 public class MvcConfigurationPostProcessor implements BeanPostProcessor, PriorityOrdered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof RequestMappingHandlerMapping) { ((RequestMappingHandlerMapping) bean).setUseSuffixPatternMatch(false); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public int getOrder() { return PriorityOrdered.HIGHEST_PRECEDENCE; } } 

在xml配置中使用上面的后处理器。

   

您可以像这样关闭后缀匹配:

    

有关详细信息,请参阅RequestMappingHandlerMapping 。