首页 > 解决方案 > 参数为空时的Spring Cloud feign行为

问题描述

我正在写一个假客户端

@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&UserName&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 中吗?

标签: javaspring-bootspring-cloudspring-cloud-feignfeign

解决方案


如果您的 URL 是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&companyName=Test

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

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

    }

推荐阅读