如何发送带有参数Spring MVC的一个getForObject请求(How to send a

2019-08-19 03:40发布

我在服务器端的方法,它给了我关于我的数据库中注册的特定名称的信息。 我是从我的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

是否有可能将参数传递给我的服务器也是这样吗?

Answer 1:

其余的模板期待一个变量“(名称)”要在那里它来代替。

我想你希望做的是建立与查询参数的URL,你有两个选择之一:

  1. 使用UriComponentsBuilder并通过添加参数
  2. 字符串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);


Answer 2:

更改

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

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

因为地图只包含对URL变量!



文章来源: How to send a getForObject request with parameters Spring MVC