3

在我的应用程序中,我必须比较控制器中的 3 个产品,我将请求映射为

@RequestMapping(value = "/products/{proId1}Vs{proId2}Vs{proId3}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2, @PathVariable("proId3") int id3)
{
   //someLogic

当点击我的网址时(http://something/products/12Vs13Vs14)

我收到 http 400 错误

我还尝试了 2 @pathVariable 之类的

@RequestMapping(value = "/products/{proId1}Vs{proId2}", method = RequestMethod.GET)
public ModelAndView compareTwoProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2) 

这工作正常,但为什么我面临 3 个变量的问题,而且服务器日志中也没有错误,那么如何找到问题所在。

有什么解决办法??

4

3 回答 3

3

如此处所述,如何明确指定您希望每个路径变量匹配的正则表达式

@RequestMapping(value = "/products/{proId1:\d+}Vs{proId2:\d+}Vs{proId3:\d+}", method = RequestMethod.GET)

于 2011-10-27T08:01:55.107 回答
1

您可以尝试将所有内容集中到一个路径变量中,然后手动解析它:

@RequestMapping(value = "/products/{compareIdString}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("compareIdString") String compareIdString)
{
    // split compareIdString on "Vs"
    // parse each resulting value to an int

不过,这更像是一种解决方法而不是解决方案。如果您想弄清楚到底出了什么问题,您可能想按照 Bozho 的建议在 Spring 代码中进行调试。

于 2011-08-11T19:29:54.103 回答
0
  • 确保问题不在响应中 - 在方法中放置一个断点并查看它是否被调用
  • 检查日志文件是否有任何迹象
  • 尝试使用斜杠作为分隔符/products/{p1}/{p2}/{p3}/products/{p1}/vs/{p2}/vs/{p3}
于 2011-08-11T16:03:14.950 回答