如何在请求正文中将地图从 Angular 客户端正确发送到 Spring Boot 控制器?收到的地图总是空的

hdw*_*dw3 4 java spring dictionary controller angular

Angular 客户端- httpClient 发送请求

const map: Map<string, string> = new Map<string, string>();
map.set('foo', 'bar');
this.http.post(address, map, httpOptions).subscribe(
  next => console.log('next: ' + next),
  error => console.log('error: ' + error),
  () => console.log('complete')
);
Run Code Online (Sandbox Code Playgroud)

Springboot 服务器-控制器接收请求

@RequestMapping(value = "/foobar", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public void fooBar(@RequestBody Map<String, String> foo){
    System.out.println(foo.entrySet());  //<-- always empty
}
Run Code Online (Sandbox Code Playgroud)

ala*_*bid 6

您必须将 Map 转换为键值对数组,事实证明,Typescript 映射不能直接在 http 帖子正文中使用。

您可以按如下方式转换地图:

const convMap = {};
map.forEach((val: string, key: string) => {
  convMap[key] = val;
});
this.http.post(apiBaseUrl + '/foobar', convMap, httpOptions).subscribe(
      next => console.log('next: ' + next),
      error => console.log('error: ' + error),
      () => console.log('complete')
);
Run Code Online (Sandbox Code Playgroud)

在后端,您System.out.println(foo.entrySet());将输出以下内容:[foo=bar]