как передавать запросы на URL-адрес в шаблоне отдыха без uri

Я пытаюсь сделать вызов GET для URL-адреса, и мне нужно передать запросы, чтобы получить ответ, который я хочу. Я использую Spring Framework и использую шаблон Rest для совершения звонков. Я знаю, что могу сделать это вручную:

Uritemplate(url+name={name}...

но это боль. Мне нужен более простой способ, и хеш-карта будет генерироваться динамически

Итак, как мне передать карту на URL-адрес без использования кодировщика 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;
    }

Таким образом, URL-адрес будет выглядеть следующим образом: example.com/search?name=john&location=africa
response: {name:john doe, love: football} --- тонны данных в формате json.


person РАВИ    schedule 02.02.2014    source источник


Ответы (1)


Вы можете использовать UriComponentsBuilder и UriComponents, которые облегчают создание 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());

отпечатки

http://example.com/search?name=john&location=africa

Есть и другие варианты, если вам нужно использовать переменные URI для сегментов пути.

Обратите внимание, что если вы отправляете HTTP-запрос, вам нужен действительный URL-адрес. Схема URL-адреса HTTP объясняется в спецификации HTTP, здесь. UriComponentsBuilder предоставляет методы для построения всех частей URL.

person Sotirios Delimanolis    schedule 02.02.2014
comment
Что-то не так с ответом? Почему минус? - person Sotirios Delimanolis; 03.12.2016
comment
Позор, что метод queryParams еще не существует в spring-web-3.2.4 - person JRA_TLL; 02.04.2018