java - TypeScript 映射到 Java 映射

标签 java angular typescript spring-boot angular2-template

我想从我的 angular 2 应用程序调用 java Api。我使用 typescript Map 在 java 应用程序中发送请求。
我在 java 中的 RestEndpoint 是这样的:

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

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

JSON parse error: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token\n at [Source: java.io.PushbackInputStream@f6b068c; line: 1, column: 1]

在 postman 中,我将其用作原始主体并且有效

{
 "key1":"value1",
 "key2":"value2",
 .....
 .....
}

编辑 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);
}

最佳答案

请确保您的实际请求正文以 { 标记开头,而不是:[。正如您所写,在 Postman 中,您使用 { } 包装您的请求,而错误消息:

[JSON parse error: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token;...

...来源:java.io.PushbackInputStream@f6b068c; 行:1,列: 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;
    }

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

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

let map:{ [name: string]: number }={};
map["key1"]=value1;
map["key2"]=value2;

关于java - TypeScript 映射到 Java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48168074/

相关文章:

java - 无法在 Java MIDI 程序中更改乐器,InvalidMidiDataException :channel out of range

java - 在模拟器上运行 android 应用程序时出现 GRPC 服务器错误

Java 数学开方源代码

javascript - Angular 2 + Typescript显示函数内的变量

twitter-bootstrap - PDF.JS 如何使 pdf-js 查看器 Canvas 响应?

java - 在MapReduce中解析XML文件

javascript - 类似于OSGi的Angular(2/4)模块生命周期

Angular2 cli 在创建新应用程序时挂起

angular - 如何在 Angular Material - Angular 2 中使用 md-sidenav 创建右侧导航栏

forms - Angular 形式输入值未定义