Bee*_*Bee 6 java http netflix-feign feign
这是我的界面。
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);
}
Run Code Online (Sandbox Code Playgroud)
在这里getUser通话效果很好。但是isValidRole无法正常工作,因为最终会这样发送请求。
/Groups?filter=displayName+Eq+{roleName}"
Run Code Online (Sandbox Code Playgroud)
这里{roleName}没有解决。我在这里想念什么?感谢一些帮助,因为我对此一无所知。
编辑:1更多问题:有没有办法避免查询参数的自动url编码?
Fra*_*ang 17
正如最近(2019.04)公开的假装问题和spring doc所说的那样?
OpenFeign @QueryMap 注释支持将 POJO 用作 GET 参数映射。
Spring Cloud OpenFeign 提供了一个等效的@SpringQueryMap 注解,从2.1.0 开始用于将POJO 或Map 参数注解为查询参数映射。
你可以这样使用它:
@GetMapping("user")
String getUser(@SpringQueryMap User user);
Run Code Online (Sandbox Code Playgroud)
public class User {
private String name;
private int age;
...
}
Run Code Online (Sandbox Code Playgroud)
使用正常工作 @QueryMap
网址:/api/v1/task/search?status=PENDING&size=20&page=0
Map<String, String> parameters = new LinkedHashMap<>()
parameters.put("status", "PENDING")
parameters.put("size", "20")
parameters.put("page", "0")
def tasks = restClientFactory.taskApiClient.searchTasks(parameters)
Run Code Online (Sandbox Code Playgroud)
内部客户端界面
@RequestLine("GET /api/v1/task/search?{parameters}")
List<Task> searchTasks(@QueryMap Map<String, String> parameters)
Run Code Online (Sandbox Code Playgroud)
它似乎是由已经打开的错误引起的-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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10818 次 |
| 最近记录: |