TypeScript Map to Java Map

M1r*_*1r1 5 java typescript spring-boot angular2-template angular

我想从我的角度2 app调用java Api.我使用typescript Map在java app中发送请求.
我在java中的RestEndpoint是这样的:

@PostMapping(value = Constants.PATH_BASE + "/sync/list")
public ResponseEntity<?>configureQueueList(@RequestBody Map<String,Integer> map){
   //code here 
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用typescript map时出现此错误:

JSON解析错误:无法从START_ARRAY标记中反序列化java.util.LinkedHashMap的实例; 嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法在[来源:java.io.PushbackInputStream@f6b068c;来源:START_ARRAY令牌\n中反序列化java.util.LinkedHashMap的实例.line:1,column:1]

邮差我用这个作为原始的身体,它的工作原理

{
 "key1":"value1",
 "key2":"value2",
 .....
 .....
}
Run Code Online (Sandbox Code Playgroud)

编辑2: 键入脚本端点

postMap(value:Map<string,number>){
    let headers = new Headers({ 'Content-Type': 'application/json' });

            let options = new RequestOptions({ headers: headers });
            return this.http.post(this.url, value, options)
            .map(success => success.status)
                .catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)

Tin*_*nki 5

请确保您的实际请求正文以{标记开头,而不是:[.正如你所写的那样,在邮递员中你用你的请求包装{ },而错误信息:

[JSON解析错误:无法从START_ARRAY 标记中反序列化java.util.LinkedHashMap的实例; ...

...来源:java.io.PushbackInputStream@f6b068c; line:1,column:1 ]

建议,您的实际请求包含[ ]标签

编辑(回答你的第一条评论):翻译Map成你的Object.例如,您可以使用此功能实现它:

function mapToObj(strMap) {
        let obj = Object.create(null);
        for (let [k,v] of strMap) {
            obj[k] = v; //look out! Key must be a string!
        }
        return obj;
    }
Run Code Online (Sandbox Code Playgroud)

然后将转换结果提供给http.post

编辑2如果您使用es6,上述答案将有效,如果您使用es5,您可以尝试使用这样的字典

let map:{ [name: string]: number }={};
map["key1"]=value1;
map["key2"]=value2;
Run Code Online (Sandbox Code Playgroud)