Skip to content

单个参数

  • 错误示例:下面示例中如果参数为空,不会报错,如果存在参数,会报错,因为OpenFeign在构造请求时需要@RequestMapping/@RequestParam/@PathVariable/@RequestHeader 等来构造http请求,而GET请求如果参数没有注解,会转为POST方式

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(String name);
    }
  • 正确写法

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(@RequestParam("name") String name);
    }

多个参数

  • 错误示例

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(User user);
    }
  • 正确写法一:使用 @SpringQueryMap

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(@SpringQueryMap User user);
    }
  • 正确写法二:将参数平铺,每个参数加上 @RequestParam 注解

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(@RequestParam("name") String name, @RequestParam("age") Integer age);
    }
  • 正确写法三:使用 Map + @RequestParam

    java
    @FeignClient(name = "userFeignClient")
    public interface UserFeignClient {
        @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
        public String getInfo(@RequestParam Map<String, Object> paramsMap);
    }

MIT版权,未经许可禁止任何形式的转载