Как отправить запрос getForObject с параметрами Spring MVC

У меня есть метод на стороне сервера, который дает мне информацию о конкретном имени, зарегистрированном в моей базе данных. Я получаю доступ к нему из своего приложения для Android.

Запрос на сервер выполняется нормально. То, что я пытаюсь сделать, - передать параметр серверу в зависимости от имени, которое я хочу получить.

Здесь мой метод на стороне сервера:

@RequestMapping("/android/played")
public ModelAndView getName(String name) {
    System.out.println("Requested name: " + name);

    ........
}

Здесь просьба Android:

private Name getName() {
    RestTemplate restTemplate = new RestTemplate();
    // Add the String message converter
    restTemplate.getMessageConverters().add(
        new MappingJacksonHttpMessageConverter());
    restTemplate.setRequestFactory(
        new HttpComponentsClientHttpRequestFactory());

    String url = BASE_URL + "/android/played.json";
    String nome = "Testing";

    Map<String, String> params = new HashMap<String, String>();
    params.put("name", nome);

    return restTemplate.getForObject(url, Name.class, params);
}

На стороне сервера я получаю:

Requested name: null

Возможно ли отправить параметры на мой сервер следующим образом?

Ответ 1

Шаблон останова ожидает переменную "{name}", чтобы она была заменена.

Я думаю, что вам нужно создать URL-адрес с параметрами запроса, у вас есть один из двух вариантов:

  • Используйте UriComponentsBuilder и добавьте параметры этим
  • String url = BASE_URL + "/android/played.json? name={name}"

Вариант 1 намного более гибкий. Вариант 2 более прямой, если вам просто нужно сделать это.

Пример по запросу

// Assuming BASE_URL is just a host url like http://www.somehost.com/
URI targetUrl= UriComponentsBuilder.fromUriString(BASE_URL)  // Build the base link
    .path("/android/played.json")                            // Add path
    .queryParam("name", nome)                                // Add one or more query params
    .build()                                                 // Build the URL
    .encode()                                                // Encode any URI items that need to be encoded
    .toUri();                                                // Convert to URI

return restTemplate.getForObject(targetUrl, Name.class);