Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.ws.rs.client.WebTarget可选查询参数_Java_Jersey_Jersey Client_Query Parameters - Fatal编程技术网

javax.ws.rs.client.WebTarget可选查询参数

javax.ws.rs.client.WebTarget可选查询参数,java,jersey,jersey-client,query-parameters,Java,Jersey,Jersey Client,Query Parameters,我正在调用支持一组可选查询参数的下游 同样地,我只是有时候想添加那些查询参数,但这样做会让人有点恼火 public Map<Subject, Role> getGrantsForResource( final String propertyId, final boolean filterByRole ) { final WebTarget resource; if (filterByRole) { resource =

我正在调用支持一组可选查询参数的下游

同样地,我只是有时候想添加那些查询参数,但这样做会让人有点恼火

public Map<Subject, Role> getGrantsForResource(
        final String propertyId,
        final boolean filterByRole
) {
    final WebTarget resource;
    if (filterByRole) {
        resource = ramClient
                .path("/v1/resource/{resource}/grants")
                .resolveTemplate("resource", "resource.property." + propertyId)
                .queryParam("role", "role.23"); //add queryparam
    } else {
        resource = ramClient
                .path("/v1/resource/{resource}/grants")
                .resolveTemplate("resource", "resource.property." + propertyId);
                //don't add queryparam
    }
公共地图getGrantsForResource(
最终字符串属性ID,
最终布尔滤波器焦距
) {
最终网络目标资源;
if(过滤器转子){
资源=ramClient
.path(“/v1/resource/{resource}/grants”)
.resolveTemplate(“resource”、“resource.property.”+propertyId)
.queryParam(“角色”、“角色.23”);//添加queryParam
}否则{
资源=ramClient
.path(“/v1/resource/{resource}/grants”)
.resolveTemplate(“resource”、“resource.property.”+propertyId);
//不要添加queryparam
}
如果有多个可选查询参数,则会导致组合爆炸

始终添加queryparam,但在不需要时将值设为空字符串或null也不起作用-添加值为null的queryparam会导致NPE中出现空字符串,发送空字符串会导致添加的查询参数中出现空字符串,但没有值

我想出了这个解决办法

public Map<Subject, Role> getGrantsForResource(
        final String propertyId,
        final Map<String, String> queryParams
) {

    WebTarget resource = ramClient
            .path("/v1/resource/{resource}/grants")
            .resolveTemplate("resource", "resource.property." + propertyId);

    for (Map.Entry<String, String> e : queryParams.entrySet()) {
        if (e.getValue() == null) {
            //don't add queryparam
        } else {
            resource = resource.queryParam(e.getKey(), e.getValue());
        }
    }
公共地图getGrantsForResource(
最终字符串属性ID,
最终映射查询参数
) {
WebTarget资源=ramClient
.path(“/v1/resource/{resource}/grants”)
.resolveTemplate(“resource”、“resource.property.”+propertyId);
对于(Map.Entry e:queryParams.entrySet()){
如果(如getValue()==null){
//不要添加queryparam
}否则{
resource=resource.queryParam(e.getKey(),e.getValue());
}
}

但是肯定有更好的方法吗?

使用地图对我来说很好。不要认为你会找到任何API使它看起来更干净。