gpt4 book ai didi

java - UriComponentsBuilder - 如何替换一些queryParams并删除未使用的?

转载 作者:行者123 更新时间:2023-11-30 02:01:17 34 4
gpt4 key购买 nike

嘿,我有这个包含多个查询参数的网址 - 它用于搜索。这是一个仇恨链接

https://someurl/customers?customer-id={customer-id}&type={type}&something={something}

我只想替换其中两个参数

Map<String, String> params = new HashMap<>();
params.put("customer-id", customerId);
params.put("something", something)

UriComponents customerUrl = UriComponentsBuilder
.fromHttpUrl(specialURL)
.buildAndExpand(params).encode();

但这会抛出异常。

java.lang.IllegalArgumentException: Map has no value for 'type'
at org.springframework.web.util.UriComponents$MapTemplateVariables.getValue(UriComponents.java:346) ~[spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]

这里最好的解决方法是什么,假设我有大约 7 个参数,用空字符串替换它们或将字符串切成两半似乎相当老套。

最佳答案

UriComponents 始终期望所有关键数据必须出现在 map 中,下面是 UriComponents 使用的引发异常的代码。

@Override
public Object getValue(String name) {
if (!this.uriVariables.containsKey(name)) {
throw new IllegalArgumentException("Map has no value for '" + name + "'");
}
return this.uriVariables.get(name);
}

解决方案:

因此,要解决您的问题,您可以尝试以下代码。

class Param extends HashMap<String, String>{


@Override
public String get(Object key) {
if(!super.containsKey(key)){
super.put(key.toString(), "");
}
return super.getOrDefault(key, "t");
}

@Override
public boolean containsKey(Object arg0) {
return true;
}
}

public class UriComponenet {

public static void main(String[] args) {

Param params = new Param();
params.put("customer-id", "1");
String specialURL="https://someurl/customers?customer-id={customer-id}&type={type}&something={something}";
UriComponents customerUrl = UriComponentsBuilder
.fromHttpUrl(specialURL)
.buildAndExpand(params).encode();

System.out.println(customerUrl);
}
}

我已将 HashMap 类扩展为 Param,然后使用该类作为 buildAndExpand 方法的输入。

希望这能解决您的问题。

关于java - UriComponentsBuilder - 如何替换一些queryParams并删除未使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52753459/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com