Java @RequestParam名称包含方括号[]
我正在编写一个假客户端来使用PHPAPI的端点 我需要调用一个端点,如下所示: www.myapp.com/number.php?编号[]=1 我的假客户是这样的:Java @RequestParam名称包含方括号[],java,spring,spring-boot,spring-cloud-feign,netflix-feign,Java,Spring,Spring Boot,Spring Cloud Feign,Netflix Feign,我正在编写一个假客户端来使用PHPAPI的端点 我需要调用一个端点,如下所示: www.myapp.com/number.php?编号[]=1 我的假客户是这样的: @FeignClient(name = "testProxy", url = "${service.url}") public interface NumberProxy { @RequestMapping(value = INumber.URL, method = RequestMethod.GET) publi
@FeignClient(name = "testProxy", url = "${service.url}")
public interface NumberProxy {
@RequestMapping(value = INumber.URL, method = RequestMethod.GET)
public String getEvents(@RequestParam("numbers[]") Integer number);
}
问题是number[]
如果我看到检查GET URL的假日志,这就是我看到的
GET [https://www.myapp.com/number.php?number[]={number[]}][1] HTTP/1.1
number[]
不会被实际值替换,这就是API调用失败的原因
有办法解决这个问题吗
p.S.
我知道PHPAPI不应该有这样的查询参数,但它是什么,我不能改变它
我也试过用
List
作为number
变量,但输出是一样的。我们说的是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)
}
记录通过客户端传递的值
如果问题出在参数命名上怎么办?在第一次出现时,您写的是数字[],但进一步命名为数字[]您应该将参数命名为不带括号的
数字
,并将类型更改为列表
:
@RequestMapping(value = INumber.URL, method = RequestMethod.GET)
public String getEvents(@RequestParam("numbers") List<Integer> number);
@RequestMapping(value=INumber.URL,method=RequestMethod.GET)
公共字符串getEvents(@RequestParam(“数字”)列表编号);
因为您可以将值作为对象获取,并通过ObjectMapperThanks映射到整数以获得答案。我尝试了这个,但没有成功,因为Faign创建的最终URL是www.myapp.com/number.php?numbers=1,而php API只有在它是www.myapp.com/number.php?numbers[]=1时才有效。谢谢您的回答。我尝试了这个方法,但没有成功,因为Faign创建的最终URL是www.myapp.com/number.php?number=1
,而php API只有在www.myapp.com/number.php?number[]=1
时才起作用。方括号对于PHP API很重要。Spring没有将方括号放在查询参数中,这就是问题所在。如果它是一个Spring服务,那么它会工作的,但我猜PHP API不是这样工作的。是的,你对RequestParam
和numbers
的包的看法是正确的,只是一个输入错误,它是numbers
(我已经更新了问题)也许是你的工作,因为它是一个常规控制器,但我的是一个假的代理方法来使用PHP API。