在服务器上使用play framework java我使用graphiql发出请求,
当我做final JsonNode variables = request().body().asJson().get("variables")
时,
带有值的JsonNode
"{\"id\":\"bar\"}"
,现在我想将这个JsonNode转换为Map,
我试过了
Json.mapper().convertValue(variables, new TypeReference<HashMap<String, Object>>() {
});
但我一直得到这个例外
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.HashMap, [simple type, class java.lang.String] -> [simple type, class java.lang.Object]] from String value ('{"id":"bar"}'); no single-String constructor/factory method at [Source: N/A; line: -1, column: -1]
我做错了什么?如何将JsonNode转换为地图?
答案 0 :(得分:0)
更改类型引用以使用Map
接口而不是HashMap
类。所以new TypeReference<Map<String, Object>>
。
更新:
此外,您说您的JSON节点的值为"{\"id\":\"bar\"}"
。那不是JSON对象,那是一个JSON字符串。确保整个对象看起来像这样:
{
"variables": {
"id":"bar"
},
"otherFields": ...
}
而不是这样:
{
"variables": "{\"id\":\"bar\"}",
"otherFields": ...
}