由于路径参数值而产生矛盾的ReSTful服务具有正斜杠

时间:2016-11-14 18:54:05

标签: rest spring-boot resttemplate

我有这样的API -

  1. /objectname/name

  2. /objectname/collection/id

  3. 两个API都是间接相关的。

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

    作为旁注,我正在编码参数值。

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

1 个答案:

答案 0 :(得分:1)

冲突来自于直接在资源路径中指定名称并作为@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)并构建以下网址:

http://localhost:8080/objectname?name=A%2FB%20Testing

我在当地对此进行了测试,并为我工作。