传递打字稿" Map"作为Angular4 HTTP POST请求的一部分

时间:2018-03-15 05:59:19

标签: angular typescript angular4-httpclient

我有一个Angular 4项目,我正在创建一个示例Map,如下所示:

let sampleMap = new Map<string, string>();
sampleMap.set('key1','value1');

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

Angular 4代码:

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

Spring Boot Rest后端代码:

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

虽然当我尝试打印&#39; sampleMap&#39;如上所示,它打印如下的空白地图:

Received={}

我正在使用打字稿版本&#39; ~2.3.3&#39;和我的&#39; tsconfig.json&#39;提及目标为&#39; es5&#39;。有人可以解释一下这种行为吗?

2 个答案:

答案 0 :(得分:3)

您必须将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();
})

答案 1 :(得分:0)

您可以创建一个具有键作为属性的对象。包含2个项目的地图示例:

let myObject = {"key1":"value1","key2":"value2"};
this.http.post('http://localhost:8080/data/posturl', myObject ).map((response: Response) => {
      return <string>response.text();
    })