在服务器上使用 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 转换为地图?
更改类型引用以使用
Map
接口而不是 HashMap
类。所以new TypeReference<Map<String, Object>>
。
更新:
另外,您说您的 JSON 节点的值为
"{\"id\":\"bar\"}"
。这不是一个 JSON 对象,而是一个 JSON 字符串。确保你的整个对象看起来像这样:
{
"variables": {
"id":"bar"
},
"otherFields": ...
}
而不是这样:
{
"variables": "{\"id\":\"bar\"}",
"otherFields": ...
}