Spring MVC 正在删除 @PathVariable

Posted

技术标签:

【中文标题】Spring MVC 正在删除 @PathVariable【英文标题】:Spring MVC is dropping a @PathVariable 【发布时间】:2011-04-13 13:00:54 【问题描述】:

如果我多次敲击控制器并敲击它,有时我的 modelCode 参数会显示为 null。但是 URL 中包含 modelCode。 使用 Spring Framework 3.0.5.RELEASE

@RequestMapping(value="ws/getallvariants/channelCode/modelCode/regionId/year") public ModelAndView getAllVariants(@PathVariable("channelCode") String channelCode, @PathVariable("modelCode") String modelCode,@PathVariable("regionId") String regionId,@PathVariable("year") String year) if (modelCode == null) int i = 0; // this should never hit, but does.

【问题讨论】:

你检查过那个控制器的作用域吗(它是默认的单例)吗? 【参考方案1】:

是的,RegEx 对我来说也是最可靠的。这样做是为了获取电子邮件地址作为参数:

@RequestMapping(value = "rest/userreadserv/search/email:.+", method = RequestMethod.GET)
public ResponseEntity getUserAccountByEmail(@PathVariable String email) ...

【讨论】:

【参考方案2】:

看看Spring MVC @PathVariable getting truncated。正则表达式方法对我有用:

@RequestMapping( "/servers/serverName:.+" )

【讨论】:

在这种情况下不是问题。参数为 2 或 3 个字母数字字符,无小数。我还看到 regionId 现在变为 null。【参考方案3】:

再次将 spring 框架更新到最新版本似乎已经奏效。显然,当我们更新我们的框架时,有些东西不能正常工作。

编辑:

所以这根本不是我们的问题...我们错误地实现了一个字符串修剪器编辑器并且它保持状态。因此,当我们将调用置于负载下时,它会交叉结果。

【讨论】:

一年后问题再次出现。看来一开始就没有解决。 问题是实际上没有正确实现的 stringTrimmerEditor。【参考方案4】:
//in your xml dispatcher  add this property to your default annotation mapper bean as follow
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="alwaysUseFullPath" value="true"></property>
</bean>       

【讨论】:

以上是关于Spring MVC 正在删除 @PathVariable的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 微服务例子一

Spring Mvc Controller - 删除问题

spring mvc 删除返回字符串中值为null的字段

Spring mvc 发现不明确的映射。无法映射控制器 bean 方法

Spring MVC 和表单绑定:如何从列表中删除项目?

基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)