TypeScript 映射到 Java 映射
TypeScript Map to Java Map
我想从我的 angular 调用 java Api 2 app.I 使用打字稿地图在 java 应用程序中发送请求。
我在 java 中的 RestEndpoint 是这样的:
@PostMapping(value = Constants.PATH_BASE + "/sync/list")
public ResponseEntity<?>configureQueueList(@RequestBody Map<String,Integer> map){
//code here
}
当我尝试使用打字稿地图时出现此错误:
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]
在邮递员中,我将其用作原始主体并且有效
{
"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;
我想从我的 angular 调用 java Api 2 app.I 使用打字稿地图在 java 应用程序中发送请求。
我在 java 中的 RestEndpoint 是这样的:
@PostMapping(value = Constants.PATH_BASE + "/sync/list")
public ResponseEntity<?>configureQueueList(@RequestBody Map<String,Integer> map){
//code here
}
当我尝试使用打字稿地图时出现此错误:
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]
在邮递员中,我将其用作原始主体并且有效
{ "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;