我正在使用FeignClient和GetMapping与外部系统进行交互。
我的GetMapping定义为:
@GetMapping(value = "/path/to/endpoint?fields=["nm","label"]")
public String hitEndpoint() {}
调试显示端点正在被调用:
https://url/path/to/endpoint?fields=[%22nm%22&fields=%22label%22]
这是失败的,因为端点期望有效的json字段参数:
https://url/path/to/endpoint?fields=[%22nm%22,%22label%22]
我如何说服GetMapping正确地发出请求?
谢谢你的帮助。
虽然我认为最好将JSON
作为POST
方法的主体传递给控制器。但如果你坚持这样做,我可以给你两个解决方案:
将您的JSON
数组编码为百分比编码,以便您可以通过URL
发送它。
例如,你的数组是这样的:
["nm","label"]
->%5B%22nm%22%2C%22label%22%5D
我使用这个在线工具对它进行编码。
第二方案
- 将你的数组编码为
Base64
和GET
,并通过URL发送给你的控制器。 - 解码控制器中给定的
Base64
字符串并将其解析为JSON
数组
不需要在URL中定义Array参数,使用spring您可以像下面这样定义API,并且使用@RequestParam
注释的功能,您可以定义您希望在URL中接收数组作为参数
@RequestMapping(value = "/path-to-endpoint", method = RequestMethod.GET)
public ResponseEntity<YourResponseDTO> yourMethodName(
@RequestParam("ids") List<Long> arrayParam) {
// Return successful response
return new ResponseEntity<>(service.yourServiceMethod(requestDTO), HttpStatus.OK);
}
然后您可以使用以下URL调用GET
端点:
/path-to-endpoint?ids=1,2,3,4