我在服务器端有一个方法,它为我提供有关在我的数据库中注册的特定名称的信息。我正在从我的 Android 应用程序访问它。
对Server的请求正常完成。我想做的是根据我想要获取的名称将参数传递给服务器。
这是我的服务器端方法:
@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
是否可以像这样向我的服务器发送参数?
其余模板需要一个变量“{name}”来替换它。
我认为您要做的是使用查询参数构建一个 URL,您有以下两个选项之一:
选项 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);
改变
String url = BASE_URL + "/android/played.json";
到
String url = BASE_URL + "/android/played.json?name={name}";
因为地图仅包含 url 的变量!
不要忘记将@RequestParam添加到服务器端的变量中
@GetMapping("/android/played")
public ModelAndView getName(@RequestParam(value = "name") String name) {
//do stuff
}