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使它看起来更干净。