【问题标题】:TypeScript Map to Java MapTypeScript 映射到 Java 映射
【发布时间】:2018-06-18 11:33:05
【问题描述】:

我想从我的 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 解析错误:无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize an instance of java.util.LinkedHashMap out of START_ARRAY token\n at [Source: java.io.PushbackInputStream@f6b068c;行:1,列:1]

在邮递员中,我将其用作原始正文,并且可以正常工作

{
 "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);
}

【问题讨论】:

  • 请同时提供您的打字稿终点,因为似乎有问题。
  • 我只是编辑问题。

标签: java angular typescript spring-boot angular2-template


【解决方案1】:

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

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

...来源: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;

【讨论】:

  • Angular 2 在 json 字符串中转换以 [ 我如何更改为以 { 开头
  • 我扩展了我的答案,请看一下:)
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多