问题描述
有没有一种方法可以在Java 8和/或Spring Boot中动态构建字符串?我正在尝试使用从REST服务调用中接收到的参数来构建URL,该服务具有多个可选过滤器,我可以使用伪AI方法在其中使用多个if-else来验证所有内容,但我认为那不是最好的方法方法。该URL被称为Jira REST Api,因此语法是唯一的。
我要避免的是这个
and = "\"%20AND%20\"";
if (param1 != null) url += param1;
if (param1 != null && param2 != null) url += param1 + and + param2;
if (param1 != null && param2 != null && param3 != null) url += param1 + and + param2 + and + param3;
if (param1 != null && param2 == null && param3 != null) url += param1 + and + param3;
我认为必须有比对每个参数验证10次更好的方法。
解决方法
有各种可用的解决方案:
- 只需使用
StringBuilder
或简单的字符串连接即可构建查询字符串 - Springs
UriComponentsBuilder
JavaDoc提供了一种结构化的查询字符串构建方式,您的基于JPA的解决方案可能更熟悉 - 使用
RestTemplates
可以传递表示您的请求参数的有条件填充的Map
- Springs较新的
WebClient
类还支持使用uri生成器在获取时设置参数,如下所示:
WebClient c = WebClient.create();
c.get().uri(uriBuilder -> uriBuilder
.queryParam("param1","value")
.queryParam("param2","value2")
.build()
).retrieve();