使用Spring进行精确的RequestMapping
我在Spring中有以下内容
@RequestMapping("/hello")
但是Spring会自动为/ hello /和/hello.*添加映射。 如何进行确切的URL匹配?
只有/你好应该工作,其他任何东西都应该404
在RequestMappingHandlerMapping
上关闭后缀匹配( useSuffixPatternMatch
)将解决您的问题,但如果您在配置中使用
(而不是手动连接所有必需的基础架构bean),这样做实际上并不那么容易。 在这种情况下,定义RequestMappingHandlerMapping
类型的附加bean将不起任何作用。
你有两个选择:
-
删除
将其扩展为一组等效的bean定义,您可以在其中应用useSuffixPatternMatch
设置。 -
保持
,并使用更简单的解决方法: 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 。