6

这是我的合同,

@RequestLine("GET /products/{id}")
@Headers({"Content-Type: application/json"})
ApiResponse getProduct(@Param("id") String productId) throws Exception;

我想获取 id = "a/b" 的产品,

如果我将此作为参数发送到getProduct("a/b")

然后形成的 URL 是http://api/products/a/b,我得到一个 404 而不是 url 应该是http://api/products/a%2Fb

有没有解决的办法?

4

2 回答 2

4

一个简单的配置就做到了,

@RequestLine(value = "GET /products/{id}", decodeSlash = false)
@Headers({"Content-Type: application/json"})
ApiResponse getProduct(@Param("id") String productId) throws Exception;

路径参数已正确编码,但 RequestTemplate 在发送导致问题的请求之前再次解码 URL(默认为 decodeSlash=true)。

于 2017-05-10T16:49:22.283 回答
0

就我而言,当代码如下所示时:

@GetMapping(path = "/document/{documentId}/files/{fileId}")
  ResponseEntity<byte[]> getDocument(@PathVariable("documentId") String documentId, @PathVariable(value = "fileId") String fileId);

还有一个问题是 @PathVariablefileId可能是123/SGINED.

设置 application.propertyfeign.client.decodeSlash=false有帮助。

于 2021-05-11T11:31:09.437 回答