java 伪客户端无法解析查询参数

ddarikpa  于 2023-04-28  发布在  Java
关注(0)|答案(4)|浏览(97)

下面是我的接口:

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}没有解析。
我错过了什么?感谢你的帮助,因为我在这一点上一无所知。

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

quhf5bfb

quhf5bfb1#

最近(2019年。04)open feign issue和spring doc说:
OpenFeign @QueryMap注解支持将POJO用作GET参数Map。
Spring Cloud OpenFeign提供了一个等效的@SpringQueryMap annotation,用于将POJO或Map参数注解为2以来的查询参数map。1.0.
你可以这样使用它:

@GetMapping("user")
    String getUser(@SpringQueryMap User user);
public class User {
    private String name;
    private int age;
    ...
}
fcg9iug3

fcg9iug32#

使用@QueryMap工作正常
URL:/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)

内部客户端界面

@RequestLine("GET /api/v1/task/search?{parameters}")
List<Task> searchTasks(@QueryMap Map<String, String> parameters)
m0rkklqb

m0rkklqb3#

它似乎是由一个已经打开的bug引起的-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;
    }
}
ih99xse1

ih99xse14#

下面的Spring fign客户端可以正常工作:

@GetMapping("/Groups?filter=displayName+Eq+{roleName}")
    SCIMGroup isValidRole(@PathVariable(value = "roleName") String roleName);

相关问题