Spring 在 java 中调用 Rest 模板

Spring Rest Template calls in java

您好,我正在尝试调用一些软层 API,并且能够进行简单的调用以及包括在 java 中使用 Spring 的 RestTemplate 传递一些 ID 的调用,但无法调用在 java 中为下面的休息 URL.

进行类似的调用
// formatted for readability
https://getInvoices?
objectFilter={  
   "invoices":{  
      "createDate":{  
         "operation":"betweenDate",
         "options":[  
            {  
               "name":"startDate",
               "value":[  
                  "06/01/2016"
               ]
            },
            {  
               "name":"endDate",
               "value":[  
                  "06/02/2016"
               ]
            }
         ]
      }
   }
}

任何人都可以帮助我如何在 java 中使用 springs rest 模板甚至使用软层 rest 客户端来做同样的事情。

您可以使用 RestTemplate

    RestTemplate restTemplate = new RestTemplate();
    String resourceUrl = "http://localhost:8080/resturl";
    ResponseEntity<String> response = restTemplate.getForEntity(resourceUrl+ "/1", String.class);

或者您可以使用 httpclient

如果您愿意使用 Jersey Client API,您的代码可以是这样的:

String json = "{\"invoices\":{\"createDate\":{\"operation\":\"betweenDate\",\"options\":[{\"name\":\"startDate\",\"value\":[\"06/01/2016\"]},{\"name\":\"endDate\",\"value\":[\"06/02/2016\"]}]}}}";

Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://api.softlayer.com")
                         .path("rest")
                         .path("v3")
                         .path("SoftLayer_Account")
                         .path("getInvoices")
                         .queryParam("objectFilter", 
                             URLEncoder.encode(json, StandardCharsets.UTF_8.toString()));

String result = target.request(MediaType.APPLICATION_JSON_TYPE).get(String.class);

使用 Spring RestTemplate,你会做:

String json = "{\"invoices\":{\"createDate\":{\"operation\":\"betweenDate\",\"options\":[{\"name\":\"startDate\",\"value\":[\"06/01/2016\"]},{\"name\":\"endDate\",\"value\":[\"06/02/2016\"]}]}}}";

RestTemplate restTemplate = new RestTemplate();

URI targetUrl = UriComponentsBuilder
        .fromUriString("https://api.softlayer.com")
        .path("rest")
        .path("v3")
        .path("SoftLayer_Account")
        .path("getInvoices")
        .queryParam("objectFilter", 
            URLEncoder.encode(json, StandardCharsets.UTF_8.toString()))
        .build()
        .toUri();

String result = restTemplate.getForObject(targetUrl, String.class);