参数为空时的Spring Cloud feign行为

Posted

技术标签:

【中文标题】参数为空时的Spring Cloud feign行为【英文标题】:Spring cloud feign behavior when parameter is empty 【发布时间】:2020-05-12 20:20:13 【问题描述】:

我正在写一个假客户端

@RequestMapping(
      path = "/TrackingServlet?CompanyName=Test&UserName=&BranchCode=",
      method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE
      )
  ResponseEntity<String> getInfo(
      @RequestParam("DocumentNumbers") String bill);

当它被调用时,url 变为/TrackingServlet?CompanyName=Test&amp;UserName&amp;BranchCode 消除了 = 符号,但 API 需要这种格式的符号,因为它是第三方 API,我们无法修改它。

也试过了

@RequestMapping(
      path = "/TrackingServlet?CompanyName=Test&UserName=",
      method = RequestMethod.GET,
      produces = MediaType.APPLICATION_JSON_VALUE
      )
  ResponseEntity<String> getInfo(
      @RequestParam("DocumentNumbers") String bill,
      @RequestParam(name = "BranchCode", required = true) String BranchCode);

  default ResponseEntity<String> getInfo(String bill) 
    return getInfo(bill, "");
  

这甚至没有参数BranchCode

我正在使用org.springframework.cloud:spring-cloud-starter-openfeign:2.1.1.RELEASE Spring Boot 2.1.4.RELEASE 版本

是否有任何方法或解决方法可以将 url 中的空参数保持原样?

【问题讨论】:

您尝试访问的 API 是什么以及您希望以 @RequestParam 形式发送的参数是什么? 我要打/TrackingServlet?CompanyName=Test&amp;UserName=&amp;BranchCode=&amp;DocumentNumbers=12345 我不会将它们放在path 中,但可能会尝试使用请求拦截器或按照上述方法将它们全部添加为请求参数。 @spencergibb 我们尝试添加路径并作为请求参数,在这两种情况下 = 符号都不存在,即使我们使用了较新的版本。现在我们使用的是 spring 请求模板,它可以在 url 中使用空参数,= 符号没有被消除 对我来说听起来是个好计划 【参考方案1】:

如果您的网址是http://localhost:8080/trackingServlet/testing?userName=pratik 使用 feign 客户端:

@FeignClient(name = "tracking-servlet-service")
public interface TestFeignClient 

        @GetMapping("/trackingServlet/testing")
        public String getQueryParam(@RequestParam("userName") String name);


如果您有 2 个或更多参数,则可以在 @RequestParam 中添加相同的参数

例如 网址http://localhost:8080/trackingServlet/testing?userName=pratik&amp;companyName=Test

 @FeignClient(name = "tracking-servlet-service")
    public interface TestFeignClient 

            @GetMapping("/trackingServlet/testing")
            public String getQueryParam(@RequestParam("userName") String name, 
                                        @RequestParam("companyName") String companyName);

    

【讨论】:

以上是关于参数为空时的Spring Cloud feign行为的主要内容,如果未能解决你的问题,请参考以下文章

springCloud的feign异常:RequestHeader参数为空时,对key加了大括号{}

使用 Spring Boot 的 Feign 客户端:RequestParam.value() 在参数 0 上为空

Spring Cloud Feign 参数上下文设计

asp.net 使用存储过程时参数为空时的处理

Spring Cloud之Feign 转发请求头(header参数)

Spring Cloud Feign 如何使用对象参数