如何在没有uri的情况下将查询传递给rest模板中的url

РАВ*_*АВИ 4 java rest url spring resttemplate

我正在尝试对网址进行GET调用,我需要传递查询以获得我想要的响应.我正在使用spring框架并使用Rest模板进行调用.我知道我可以手动这样做:

Uritemplate(url+name={name}...
Run Code Online (Sandbox Code Playgroud)

但这是一种痛苦.我需要一种更简单的方法,并且动态生成哈希映射

那么如何在不使用uri编码器的情况下将地图传递给网址?

 String url = "example.com/search
 Map<String, String> params = new HashMap<String, String>();
          params.put("name", "john");
          params.put("location", "africa");

public static ResponseEntity<String> callGetService(String url, Map<String, String> param) {
        RestTemplate rest = new RestTemplate();
        rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

        HttpEntity<?> reqentity = new HttpEntity<Object>(headers);

        ResponseEntity<String> resp = rest.exchange(url, HttpMethod.GET, reqentity, String.class);
        System.out.println(resp);
        return resp;
    }
Run Code Online (Sandbox Code Playgroud)

所以url最终会像这个example.com/search?name=john&location=africa
回复:{name:john doe,love:football} ---吨的json数据

Sot*_*lis 17

您可以使用UriComponentsBuilderUriComponents便于制作URI

String url = "http://example.com/search";
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("name", "john");
params.add("location", "africa");

UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(url).queryParams(params).build();
System.out.println(uriComponents.toUri());
Run Code Online (Sandbox Code Playgroud)

版画

http://example.com/search?name=john&location=africa
Run Code Online (Sandbox Code Playgroud)

如果需要为路径段使用URI变量,还有其他选项.

请注意,如果要发送HTTP请求,则需要有效的URL.该HTTP URL模式在HTTP规范解释的,在这里.该UriComponentsBuilder提供的方法来构建URL的所有部分.