これが私のインターフェースです。
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エンコードを回避する方法はありますか?
すでに開いているバグが原因であるようです- 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;
}
}
最近(2019.04) 未解決の問題 および 春のドキュメント と言う:
OpenFeign @QueryMapアノテーションは、GETパラメータマップとして使用されるPOJOのサポートを提供します。
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;
...
}
@QueryMap
を使用して正常に動作
URL:/ api/v1/task/search?status = PENDING&size = 20&page =
Map<String, String> parameters = new LinkedHashMap<>()
parameters.put("status", "PENDING")
parameters.put("size", "20")
parameters.put("page", "0")
def tasks = restClientFactory.taskApiClient.searchTasks(parameters)
クライアントインターフェイスの内部
@RequestLine("GET /api/v1/task/search?{parameters}")
List<Task> searchTasks(@QueryMap parameters)