Spring Boot Web RestTemplate将对象作为查询参数发送

时间:2020-11-05 22:51:42

标签: java spring spring-mvc

我想发出一个URL请求参数设置为对象值的POST请求。

例如

http://test/data?a=1&b=2&c=3

我想使用这样的类对此URL进行发布请求:

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);
}

1 个答案:

答案 0 :(得分:0)

您的要求就像js中的QS。谢谢qianshui423/qs。它是用Java实现的QS。它是由一个中国人编码的。首先git克隆它,并使用以下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
    }
}