首页 > 解决方案 > 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);
}

标签: javaspringspring-mvc

解决方案


您的要求就像 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
    }
}


推荐阅读