【问题标题】:Spring MVC: Ambiguous RequestMappings after moving to JavaConfigSpring MVC:迁移到 JavaConfig 后的模糊 RequestMappings
【发布时间】:2013-04-04 13:17:40
【问题描述】:

在从 XML 设置转移到 JavaConfig 设置后,我们的许多 RequestMappings 已经损坏,现在返回模棱两可的方法错误。我们的方法依赖于带有正则表达式的@PathVariable 来确定调用哪个。例如:

@RequestMapping(value={"/{id:\\d+}/boats"})
public String getBoatsById(@PathVariable("id") Long id, Model model,
HttpServletRequest request) throws Exception {...}

@RequestMapping(value={"/{id}/boats"})
public String getBoatsByName(@PathVariable("id") String id, Model model,
HttpServletRequest request) throws Exception {...}

这种用法可以正常工作,但使用新的 JavaConfig 设置与 XML 设置相比,它会因映射而出现模棱两可的错误。

JavaConfig 类是这样开始的:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example", excludeFilters = { @ComponentScan.Filter( Configuration.class ) })
public class WebConfig extends WebMvcConfigurationSupport

这与使用 AnnotationMethodHandlerAdapter 的 XML 设置与现在使用推荐的 RequestMappingHandlerAdapter 的 JavaConfig 类有什么关系吗?有没有我缺少的设置?

【问题讨论】:

    标签: spring spring-mvc annotations ambiguous


    【解决方案1】:

    刚刚浏览了源代码,AnnotationMethodHandlerAdapter 使用的 RequestMappingInfoRequestMappingHandlerAdapter 不同。前者在检查相等性时忽略您指定的模式/路径,而后者尊重它。这就是为什么你有模棱两可的映射错误。不知道是不是 bug,最好问问 spring-contrib 邮件列表的人。

    编辑

    更改映射可能是个好主意。引入{name:reg_exp} 语法不是为了解决歧义。摘自官方文档:

    有时您需要更精确地定义 URI 模板变量。 考虑 URL“/spring-web/spring-web-3.0.5.jar”。你怎么破 分解成多个部分?

    @RequestMapping 注解支持使用正则表达式 在 URI 模板变量中。语法是 {varName:regex} 其中 第一部分定义变量名,第二部分 - 常规 表达式。例如:

    @RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{版本:\d\.\d\.\d}{extension:\.[a-z]+}")
    公共无效句柄(@PathVariable 字符串版本,@PathVariable 字符串扩展){
        // ...
    } }

    您的处理程序方法从一开始就模棱两可,您只提供了一种解决歧义的骇人听闻的方法。

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多