我是SpringBoot的新手,正在尝试弄清楚一些事情。我将发送HashMap作为RestTemplate HttpMethod.GET调用的一部分。我的问题是,作为请求的一部分,我发送HashMap的方式是否正确?如果正确,我们如何从MicroService2访问HashMap值
MicroService 1
Map<String, String> map=new HashMap<>();
map.put("name", "abc");
HttpEntity<Map<String, String>> entity=new HttpEntity<>(map, headers);
restTemplate.exchange("http:localhost:8080/getdata", HttpMethod.GET, entity , Object.class);
现在如何获取从MicroService1传递的HashMap的值。
MicroService 2
@GetMapping("/getdata")
Object getData(@RequestParam HashMap<String,String> user){
sysout(user) // Null
}
我已经在我的机器上测试了以下解决方案及其工作情况。您需要在查询参数中传递信息,如下例所示:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders header = new HttpHeaders();
header.add("headerName", "headerValue");
HttpEntity<String> entity = new HttpEntity<>(header);
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString("http://localhost:8080/getdata");
//add data as a query params
uriComponentsBuilder.queryParam("name", "abc");
restTemplate.exchange(uriComponentsBuilder.toUriString(), HttpMethod.GET, entity , Object.class);
这是不正确的。在控制器方法中,您应该传递Map
接口,而不是HashMap
实现,当您声明变量时,也应该使用相同的方法,我的意思是:Map<String,String> map=new HashMap<>()
代替HashMap<String,String> map=new HashMap<>();