@RequestParam名称包括方括号[]

问题描述 投票:1回答:2

我正在编写一个feign客户端来使用PHP API的端点。

我需要调用一个端点,如:

呜呜呜.没有app.com/number.PHP?number[]=1

我的Feign客户端看起来像这样:

@FeignClient(name = "testProxy", url = "${service.url}")
public interface NumberProxy {

    @RequestMapping(value = INumber.URL, method = RequestMethod.GET)
    public String getEvents(@RequestParam("numbers[]") Integer number);
}

问题是number[]

如果我看到feign日志来检查GET URL,这就是我所看到的。

GET [https://www.myapp.com/number.php?number[]={number[]}][1] HTTP/1.1

number[]不会被实际值替换,这就是API调用失败的原因。

有办法解决这个问题吗?

附:我知道PHP API不应该有这样的查询参数,但它就是这样,我无法改变它。

我也尝试使用List<Integer>作为number变量,但输出相同。

java spring spring-boot spring-cloud-feign netflix-feign
2个回答
1
投票

我们是否在谈论org.springframework.web.bind.annotation.RequestParam,如果是这样,它不应该是方括号的问题。对我来说它工作正常:

@RequestMapping(value = "/api/somepath", method = RequestMethod.POST)
  public void uploadData(
      @RequestPart("file") MultipartFile fileUpload, HttpServletRequest request,
      HttpServletResponse response, @RequestParam(name = "param[]") Integer number) {
  LOGGER.trace("paramValue=[{}]", number)
}

记录通过客户端传递的值

如果问题出在参数命名中怎么办?在第一次出现时你写了numberS []但是进一步命名为number []


1
投票

您应该将参数命名为numbers而不使用括号,并将类型更改为List

@RequestMapping(value = INumber.URL, method = RequestMethod.GET)
public String getEvents(@RequestParam("numbers") List<Integer> number);
© www.soinside.com 2019 - 2024. All rights reserved.