ReSTful服务由于路径参数值具有正斜杠而变得矛盾

ReSTful服务由于路径参数值具有正斜杠而变得矛盾,rest,spring-boot,resttemplate,Rest,Spring Boot,Resttemplate,我有这样的API- /objectname/name /objectname/collection/id 这两个API都是间接相关的 调用名称值为“A/B类型”的第一个API时出现问题。所以rest控制器实际上调用了第二个API,而不是第一个(/objectname/A/B Type),因为正斜杠。如何处理这种情况 作为旁注,我正在对参数值进行编码 我使用SpringBoot和RestTemplate开发了restful服务。冲突来自于直接在资源路径中指定名称,并作为@PathVariable传

我有这样的API-

  • /objectname/name

  • /objectname/collection/id

  • 这两个API都是间接相关的

    调用名称值为“A/B类型”的第一个API时出现问题。所以rest控制器实际上调用了第二个API,而不是第一个(
    /objectname/A/B Type
    ),因为正斜杠。如何处理这种情况

    作为旁注,我正在对参数值进行编码


    我使用SpringBoot和RestTemplate开发了restful服务。

    冲突来自于直接在资源路径中指定名称,并作为@PathVariable传递给函数

    您的代码如下所示:

    @RequestMapping(value = "objectname/{name}", method = RequestMethod.GET)
        public String yourMethodName(@PathVariable String name){
            return name;
        }
    
    为了避免这种冲突,我建议(如果允许修改@RestController或@RepositoryRestResource层)在@RequestParam中传递对象的值

    例如:

    @RequestMapping(value = "/objectname", method = RequestMethod.GET)
        public String yourMethodName(@RequestParam(name = "name", required = true) String name){
     return name;
    }
    
    也就是说,当您使用RestTemplate构建请求时,您应该对您的名称进行url编码(A%2FB%20Testing),并构建以下url:


    我在本地对此进行了测试,效果良好。

    如何对参数进行编码?URL编码?我们已经在做了,但是没有luckNote:你可以看看下面的帖子,作为我提供的解决方案的替代方案(将值作为RequestParam传递更容易实现)。我明白你的意思了,我不能更改API“RequestMapping”。问题是我是否已经将API请求映射为“/objectName”。我们还有别的办法解决吗?