java - Spring Boot Web RestTemplate 发送对象作为查询参数
问题描述
我想发出一个 POST 请求,并将 URL 查询参数设置为对象的值。
例如
http://test/data?a=1&b=2&c=3
我想用这样的类向这个 URL 发出一个 post 请求:
public class Data {
private Integer a;
private Integer b;
private Integer c;
}
我不想手动执行每个字段,如下所示:
public void sendRequest(Data data) {
String url = UriComponentsBuilder.fromHttpUrl("http://test/")
.queryParam("a", data.getA())
.queryParam("b", data.getB())
.queryParam("c", data.getC())
.toUriString();
restTemplate.postForObject(url, body, Void.class);
}
相反,我想使用整个对象:
public void sendRequest(Data data) {
String url = UriComponentsBuilder.fromHttpUrl("http://test/")
.queryParamsAll(data) //pseudo
.toUriString();
restTemplate.postForObject(url, body, Void.class);
}
解决方案
您的要求就像 js 中的 QS。谢谢qianshui423 /qs。它是java中的实现QS。它是由一个中国人编码的。首先 git clone 它并使用下面的 cmd 来构建。您将在 build/libs 中获得一个名为“qs-1.0.0.jar”的 jar(JDK 需要版本 8)
# cd qs directory
./gradlew build -x test
导入它,我做一个简单的演示如下。根据您的要求,您可以构建类以将您的 Obj 转换为 QSObject。除了 toQString,QS 还可以将字符串解析为 QSObject。我认为它很强大。
import com.qs.core.QS;
import com.qs.core.model.QSObject;
public class Demo {
public static void main(String[] args) throws Exception{
QSObject qsobj = new QSObject();
qsobj.put("a",1);
qsobj.put("b",2);
qsobj.put("c",3);
String str = QS.toQString(qsobj);
System.out.println(str); // output is a=1&b=2&c=3
}
}
推荐阅读
- sql-server - 设置 Microsoft 分析服务器模式
- r - 如果开始和结束时间可用,R 每天汇总数据
- javascript - export default 和 export { default } 的区别
- javascript - 如何使用 vuejs 显示谷歌地图
- python - 将自然语言查询转换为 SQL 查询的任务
- android - Google Play - 确认订阅的购买令牌时出现错误“subscriptionNotOwnedByUser”
- java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException:没有为 ObjectReader 配置值类型
- c# - 如何正确嵌入
- java - API 需要 2 分钟来加载数据。想用缓存
- qt - 如何创建自己的使用 qss 的 qt 小部件