将 Typescript“Map”作为 Angular4 HTTP POST 请求的一部分传递

Kau*_*bhN 10 typescript angular angular4-httpclient

我有一个 Angular 4 项目,我在其中创建了一个示例地图,如下所示:

let sampleMap = new Map<string, string>();
sampleMap.set('key1','value1');
Run Code Online (Sandbox Code Playgroud)

现在我将此 Map 作为参数传递给 Angular 4 Post 方法,该方法连接到 Spring Boot Rest 后端,如下所示

角度 4 代码:

this.http.post('http://localhost:8080/data/posturl', sampleMap).map((response: Response) => {
      return <string>response.text();
    })
Run Code Online (Sandbox Code Playgroud)

Spring Boot Rest后端代码:

@RequestMapping("/posturl")
public String launch(@RequestBody Map<String, String> sampleMap) {
    System.out.println("Received=" + sampleMap);
    return "SUCCESS";
}
Run Code Online (Sandbox Code Playgroud)

尽管当我尝试打印如上所示的“sampleMap”时,它会打印一张如下所示的空白地图:

Received={}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Typescript 版本 '~2.3.3' 并且我的 'tsconfig.json' 提到目标为 'es5'。有人可以解释这种行为吗?

小智 13

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

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

const convMap = {};
sampleMap.forEach((val: string, key: string) => {
  convMap[key] = val;
});
this.http.post('http://localhost:8080/data/posturl', convMap).map((response: Response) => {
  return <string>response.text();
})
Run Code Online (Sandbox Code Playgroud)