GetMapping与JSON数组参数



我正在使用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

我使用这个在线工具对它进行编码。

第二方案

  1. 将你的数组编码为Base64GET,并通过URL发送给你的控制器。
  2. 解码控制器中给定的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