SpringBoot:如何发送和访问通过 RestTemplate HttpGet 请求传递的 HashMap<String,String>?



我是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<>();

最新更新