有没有办法在xe:restViewColumn中返回JSON对象?

有没有办法在xe:restViewColumn中返回JSON对象?,rest,xpages,xpages-ssjs,xpages-extlib,Rest,Xpages,Xpages Ssjs,Xpages Extlib,我试图在一个XPage上生成一个viewJsonService服务类型的REST服务 在一个列中,我需要一个JSON对象,并试图用以下代码解决这个问题: <xe:restViewColumn name="surveyResponse"> <xe:this.value> <![CDATA[#{javascript: var arrParticipants = new Array(); arrParticipants.push({"participant": "A"

我试图在一个XPage上生成一个viewJsonService服务类型的REST服务

在一个列中,我需要一个JSON对象,并试图用以下代码解决这个问题:

<xe:restViewColumn name="surveyResponse">
 <xe:this.value>
<![CDATA[#{javascript:
var arrParticipants = new Array();

arrParticipants.push({"participant": "A", "selection": ["a1"]});
arrParticipants.push({"participant": "B", "selection": ["b1", "b2"]});

return (arrParticipants);
}
]]>

 </xe:this.value>
</xe:restViewColumn>
我得到的是:

...
"surveyResponse": [
      "???",
      "???"
    ]
...
尝试对数组使用toJson时,结果不是有效的JSON格式:

...
"surveyResponse": "[{\"selection\": [\"a1\"],\"participant\":\"A\"},{\"selection\": [\"b1\",\"b2\"],\"participant\":\"B\"}]"
...
当对数组使用fromJson时,结果是:

{
   "code": 500,
   "text": "Internal Error",
   "message": "Error while executing JavaScript computed expression",
   "type": "text",
   "data": "com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression at com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:132) at com.ibm.xsp.extlib.component.rest.DominoViewColumn.getValue(DominoViewColumn.java:93) at com.ibm.xsp.extlib.component.rest.DominoViewColumn.evaluate(DominoViewColumn.java:133) at com.ibm.domino.services.content.JsonViewEntryCollectionContent.writeColumns(JsonViewEntryCollectionContent.java:213) at com.ibm.domino.services.content.JsonViewEntryCollectionContent.writeEntryAsJson(JsonViewEntryCollectionContent.java:191) at com.ibm.domino.services.content.JsonViewEntryCollectionContent.writeViewEntryCollection(JsonViewEntryCollectionContent.java:170) at com.ibm.domino.services.rest.das.view.RestViewJsonService.renderServiceJSONGet(RestViewJsonService.java:394) at com.ibm.domino.services.rest.das.view.RestViewJsonService.renderService(RestViewJsonService.java:112) at com.ibm.domino.services.HttpServiceEngine.processRequest(HttpServiceEngine.java:167) at com.ibm.xsp.extlib.component.rest.UIBaseRestService._processAjaxRequest(UIBaseRestService.java:242) at com.ibm.xsp.extlib.component.rest.UIBaseRestService.processAjaxRequest(UIBaseRestService.java:219) at com.ibm.xsp.util.AjaxUtilEx.renderAjaxPartialLifecycle(AjaxUtilEx.java:206) at com.ibm.xsp.webapp.FacesServletEx.renderAjaxPartial(FacesServletEx.java:225) at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:170) at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160) at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576) at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281) at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847) at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796) at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565) at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265) at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:653) at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:476) at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341) at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297) at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) Caused by: com.ibm.jscript.InterpretException: Script interpreter error, line=7, col=8: Error while converting from a JSON string at com.ibm.jscript.types.FBSGlobalObject$GlobalMethod.call(FBSGlobalObject.java:785) at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) at com.ibm.jscript.types.FBSGlobalObject$GlobalMethod.call(FBSGlobalObject.java:219) at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:175) at com.ibm.jscript.ASTTree.ASTReturn.interpret(ASTReturn.java:49) at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119) at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139) at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435) at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424) at com.ibm.jscript.JSExpression$2.run(JSExpression.java:414) at java.security.AccessController.doPrivileged(AccessController.java:284) at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410) at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251) at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234) at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:221) at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:193) at com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:78) ... 27 more Caused by: com.ibm.commons.util.io.json.JsonException: Error when parsing JSON string at com.ibm.commons.util.io.json.JsonParser.fromJson(JsonParser.java:61) at com.ibm.jscript.types.FBSGlobalObject$GlobalMethod.call(FBSGlobalObject.java:781) ... 43 more Caused by: com.ibm.commons.util.io.json.parser.ParseException: Encountered " "object "" at line 1, column 2. Was expecting one of: "false" ... "null" ... "true" ... ... ... ... "{" ... "[" ... "]" ... "," ... at com.ibm.commons.util.io.json.parser.Json.generateParseException(Json.java:568) at com.ibm.commons.util.io.json.parser.Json.jj_consume_token(Json.java:503) at com.ibm.commons.util.io.json.parser.Json.arrayLiteral(Json.java:316) at com.ibm.commons.util.io.json.parser.Json.parseJson(Json.java:387) at com.ibm.commons.util.io.json.JsonParser.fromJson(JsonParser.java:59) ... 44 more "
}

有什么方法可以得到想要的答案吗?

你不能使用内置的服务器端javascript函数toJson

你不能使用内置的服务器端javascript函数toJson

你可以在读取JSON时尝试拦截AJAX调用,然后手动清除JSON字符串数据

这里有更多的细节


我个人建议不要这样做,除非您绝对确定最终用户不能将代码注入JSON数据

您可以尝试在读取JSON时拦截AJAX调用,然后手动清除JSON字符串数据

这里有更多的细节


我个人建议不要这样做,除非您绝对确定最终用户不能将代码注入JSON数据

如果需要返回级联JSON对象,那么实现所需结果的最佳方法是使用xe:customRestService

所有其他xe:**RestService元素都假定您将返回一个由参数和值对组成的平面JSON构造,其中值是一个简单的数据类型(如布尔值、数字或字符串以及-有趣的-数组),但不是一个复杂的数据类型(如对象)

这就是,这个结果

...
"surveyResponse": [
      { "participant": "A",
        "selection": [ "a1" ]
      },
      { "participant": "B",
        "selection": [ "b1", "b2" ]
      }
    ]
...
仅在使用xe:customRestService时可用,您可以自己定义JSON结果

使用其他服务,结果仅限于此结构:

...
"surveyResponse": true;
...


如果需要返回级联JSON对象,那么实现所需结果的最佳方法是使用xe:customRestService

所有其他xe:**RestService元素都假定您将返回一个由参数和值对组成的平面JSON构造,其中值是一个简单的数据类型(如布尔值、数字或字符串以及-有趣的-数组),但不是一个复杂的数据类型(如对象)

这就是,这个结果

...
"surveyResponse": [
      { "participant": "A",
        "selection": [ "a1" ]
      },
      { "participant": "B",
        "selection": [ "b1", "b2" ]
      }
    ]
...
仅在使用xe:customRestService时可用,您可以自己定义JSON结果

使用其他服务,结果仅限于此结构:

...
"surveyResponse": true;
...


抱歉,使用fromJson时引发错误。但是toJson的结果也不是我期望的结果(请参见编辑的问题)。很抱歉,使用fromJson时会抛出错误。但是toJson的结果也不是我所期望的结果(请参见编辑的问题)。您得到了错误500,因此请查看IBM_TECHNICAL_支持目录xpages*log,错误的确切原因是什么。抛出错误是因为JSON的方法需要字符串(或布尔值)。但它属于object类型。再说一遍。这不是我正在努力解决的问题。我希望为REST服务获得正确(有效)的JSON响应。但是响应传递的字符串无效。您看到的是故意停止远程代码注入攻击。您遇到了错误500,因此请查看IBM_TECHNICAL_支持目录xpages*log,错误的确切原因是什么。抛出错误是因为JSON的方法需要字符串(或布尔值)。但它属于object类型。再说一遍。这不是我正在努力解决的问题。我希望为REST服务获得正确(有效)的JSON响应。但是响应传递的字符串无效。您看到的是故意停止远程代码注入攻击。我试图公开一个可以从其他网站(使用小部件或url)访问的REST服务。没有可以拦截的AJAX调用。解决此问题的最佳方法是使用xe:customRestService。我正在尝试公开一个可以从其他网站(使用小部件或url)访问的REST服务。没有可以拦截的AJAX调用。解决此问题的最佳方法是使用xe:customrest服务。