我有这样的API -
/objectname/name
/objectname/collection/id
两个API都是间接相关的。
调用名称值为“A / B类型”的第一个API时出现问题。因此,休息控制器实际上首先调用第二个API(/objectname/A/B Type
),因为正斜杠。如何处理这种情况。
作为旁注,我正在编码参数值。
我使用SpringBoot和RestTemplate开发了restful服务。
答案 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
我在当地对此进行了测试,并为我工作。