我试图让 JavaScript 调用的结果类似于 Map<String,Object> 的 JSON 结构,其中值可能是数字、字符串、布尔值、对象(地图)或数组(列表),类似于杰克逊所做的如果将值转换为地图。
使用Value.as(Map.class)
调用时,我希望 Map 中的值遵循这些规则
如果使用原始 Map.class 或 Object 组件类型,则列表的返回类型递归地服从 Object 目标类型映射规则。
进一步了解文档(对象映射规则 8)
如果该值具有数组元素并且其数组大小小于或等于 Integer.MAX_VALUE,则结果值将实现 List。
然而这个测试失败了
public class TestGraalMap {
static String JS_CODE = "(function myFun(){ return { listProperty: ['listValue']};})";
@Test
public void testList() {
try (Context context = Context.create()) {
Value value = context.eval("js", JS_CODE);
Value result = value.execute();
Map<String,Object> resultMap = result.as(Map.class);
assertThat(resultMap).hasEntrySatisfying("listProperty", testArray -> {
assertThat(testArray).asList().containsExactly("listValue");
});
}
}
}
出现以下错误。
Expecting:
<{}>
to be an instance of:
<java.util.List>
but was instance of:
<com.oracle.truffle.polyglot.PolyglotMap>
我错过了什么?