Spring REST API无法正确映射路径变量

时间:2017-01-22 19:23:35

标签: java spring spring-mvc

我有以下请求映射:

@RequestMapping(value = {"/product/{id}-{name}"}, method = RequestMethod.GET)

当我使用" / product / 1-product-name-here"对此端点执行GET时我收到以下错误:

  

无法转换类型' java.lang.String'的值要求的类型' int&#39 ;;嵌套异常是java.lang.NumberFormatException

任何人都可以建议我应该做些什么来解决这个问题?我认为Spring会在第一个破折号之前采取任何措施作为ID以及随后的任何内容作为名称,但事实并非如此。

如果我使用/ product / 1-name进行GET,它可以正常工作。如果路径变量包含破折号,那似乎是一种奇怪的行为。

由于

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

@RequestMapping(value = {"/product/{id:\\d+}-{name}"}, method = RequestMethod.GET)

您可以为路径变量提供正则表达式。你需要在冒号(:)之后给出正则表达式。

参考: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates-regex

答案 1 :(得分:0)

添加绑定注释@PathVariable并将其分配给所需的变量类型

@RequestMapping(value = "/product/{id}/{name}", method = RequestMethod.GET)
public void yourMethod(@PathVariable("id") Long id,  @PathVariable("name") String  name )
{
 ...
}