如何使用URL参数进行GET API请求?

时间:2017-12-05 09:50:33

标签: java rest get query-parameters

Client client = ClientBuilder.newClient();
urlApi="https://localhost:123/demo/api/v1/rows/search?";
WebTarget webTarget = client.target(urlApi);
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
    webTarget.queryParam(entry.getKey(), entry.getValue());
}
webTarget.queryParam("searchConditions",webTarget.queryParam("mobileNo","+9999999999"));

Invocation.Builder builder = webTarget.request();

builder.header("id", "ABC");
String asB64 = Base64.getEncoder().encodeToString("ABC:PWD".getBytes("utf-8"));
logger.debug("Calling  API "+urlApi);
builder.header("Authorization", "Basic "+asB64);
builder.header("Content-type", MediaType.APPLICATION_JSON);     
response = builder.get();
responseData = response.readEntity(String.class);
System.out.println(responseData);

我正在尝试使用searchCondition作为密钥进行GET请求,将值设置为{mobileNo="+919999999999"},我无法使其生效。

除此之外,如何打印请求“标题”和“查询参数”?提前谢谢

1 个答案:

答案 0 :(得分:0)

我认为您需要对值输入进行编码,如下所示:

webTarget.queryParam("searchCondition", URLEncoder.encode("{mobileNo=\"+919999999999\"}", StandardCharsets.UTF_8.toString()));

UDPATE: 使用Spring的其余客户端示例:

@Test
public void testStack() throws Exception {
    RestTemplate rest = new RestTemplate();
    String fooResourceUrl="http://localhost:8080/usersParam?";
    RestTemplate restTemplate = new RestTemplate();
    String parameter = "{mobileNo=\"+919999999999\"}";

    ResponseEntity<String> response = restTemplate.getForEntity(fooResourceUrl + "parameter=" + URLEncoder.encode(parameter, StandardCharsets.UTF_8.toString() ), String.class);
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}

这将是其他服务:

@RequestMapping(method = RequestMethod.GET, value="/usersParam")
    public User getUsersInfo(@RequestParam String parameter) throws UnsupportedEncodingException {
         System.out.println(URLDecoder.decode(parameter, StandardCharsets.UTF_8.toString() ));
        return null;
    }