简体   繁体   English

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

[英]Spring Boot Web RestTemplate Send Object as Query Param

I want to make a POST request with URL Query Params set to the values of an object.我想发出一个 POST 请求,并将 URL Query Params 设置为对象的值。

For example例如

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

I want to make a post request to this URL with a class like this:我想用这样的类向这个 URL 发出 post 请求:

public class Data {
  private Integer a;
  private Integer b;
  private Integer c;
}

I do NOT want to do each field manually, like this:我不想手动完成每个字段,如下所示:

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

Instead, I want to use the entire object:相反,我想使用整个对象:

public void sendRequest(Data data) {
  String url = UriComponentsBuilder.fromHttpUrl("http://test/")
    .queryParamsAll(data) //pseudo 
    .toUriString();

  restTemplate.postForObject(url, body, Void.class);
}

Your requirement is like QS in js.您的要求就像 js 中的 QS。 Thx qianshui423/qs .谢谢 qianhui423/qs It is implementation QS in java.它是java中的实现QS。 It is coded by a Chinese guy.它是由一个中国人编码的。 At first git clone it and use below cmd to build.首先 git clone 它并使用下面的 cmd 来构建。 You will get a jar called "qs-1.0.0.jar" in build/libs (JDK required version 8)您将在 build/libs 中获得一个名为“qs-1.0.0.jar”的 jar(JDK 需要版本 8)

# cd qs directory

./gradlew build -x test

Import it, I do a simple demo as below.导入它,我做一个简单的演示如下。 For your requirement, you can build class to transfer your Obj into QSObject.根据您的要求,您可以构建类将您的 Obj 传输到 QSObject。 Besides toQString, QS can parse string to QSObject.除了 toQString 之外,QS 还可以将字符串解析为 QSObject。 I think it powerful.我认为它很强大。


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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM