Felipe Mosso Felipe Mosso - 5 months ago 44
Android Question

How to send a getForObject request with parameters Spring MVC

I have a method on the Server side which gives me information about an specific name registered in my database. I'm accessing it from my Android application.

The request to Server is done normally. What I'm trying to do is to pass parameter to the server depending on the name I want to get.

Here's my Server side method:

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

........
}


Here's the Android request to it:

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);
}


In the server side, I'm only getting:

Requested name: null


Is it possible to send parameters to my Server like this?

Answer

The rest template is expecting a variable "{name}" to be in there for it to replace.

What I think you're looking to do is build a URL with query parameters you have one of two options:

  1. Use a UriComponentsBuilder and add the parameters by that
  2. String url = BASE_URL + "/android/played.json?name={name}"

Option 1 is much more flexible though. Option 2 is more direct if you just need to get this done.

Example as requested

// Assuming BASE_URL is just a host url like http://www.somehost.com/
URI targetUrl= UriComponentsBuilder.fromUriString(BASE_URL)
    .path("/android/played.json")
    .queryParam("name", nome)
    .build()
    .toUri();

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