如何使用参数Spring MVC发送getForObject请求

时间:2013-04-02 21:12:19

标签: android rest spring-mvc get resttemplate

我在服务器端有一个方法,它提供了有关在我的数据库中注册的特定名称的信息。我正从我的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

是否可以像这样向我的服务器发送参数?

2 个答案:

答案 0 :(得分:46)

其余模板期望变量“{name}”在其中以供替换。

我认为您要做的是使用查询参数构建一个URL,您有以下两种选择之一:

  1. 使用UriComponentsBuilder并按
  2. 添加参数
  3. String url = BASE_URL +“/ android / playsed.json?name = {name}”
  4. 选项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);
    

答案 1 :(得分:0)

更改

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

String url = BASE_URL + "/android/played.json?name={name}";

因为地图仅包含用于url的变量!