Feign Client 不解析 Query 参数

新手上路,请多包涵

这是我的界面。

 public interface SCIMServiceStub {

    @RequestLine("GET /Users/{id}")
    SCIMUser getUser(@Param("id") String id);

    @RequestLine("GET /Groups?filter=displayName+Eq+{roleName}")
    SCIMGroup isValidRole(@Param("roleName") String roleName);

}

这里 getUser 调用工作正常。但是 isValidRole 不能正常工作,因为请求最终是这样发送的。

 /Groups?filter=displayName+Eq+{roleName}"

这里 {roleName} 没有解决。我在这里错过了什么?感谢您的帮助,因为我此时一无所知。

编辑:还有 1 个问题:有没有办法避免查询参数的自动 url 编码?

原文由 Bee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 544
2 个回答

它似乎是由一个已经打开的错误引起的 - https://github.com/OpenFeign/feign/issues/424

就像在评论中一样,您可以定义自己的 Param.Expander 如下所示的解决方法。

 @RequestLine("GET /Groups?filter={roleName}")
String isValidRole(@Param(value = "roleName", expander = PrefixExpander.class) String roleName);

static final class PrefixExpander implements Param.Expander {
    @Override
    public String expand(Object value) {
        return "displayName+Eq+" + value;
    }
}

原文由 yongsung.yoon 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如最近(2019.04) open feign issuespring doc 所说:

OpenFeign @QueryMap 注释支持将 POJO 用作 GET 参数映射。

Spring Cloud OpenFeign提供了一个等价的@SpringQueryMap注解,从2.1.0开始,用于将POJO或Map参数注解为查询参数映射。

你可以像这样使用它:

     @GetMapping("user")
    String getUser(@SpringQueryMap User user);

 public class User {
    private String name;
    private int age;
    ...
}

原文由 Frank.Chang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题