【问题标题】:Spring MVC is dropping a @PathVariableSpring MVC 正在删除 @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. }

【问题讨论】:

  • 你检查过那个控制器的作用域吗(它是默认的单例)吗?

标签: spring-mvc


【解决方案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>       
    

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2013-11-17
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2015-04-30
      • 2012-08-30
      • 2012-07-06
      相关资源
      最近更新 更多