Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JAVA组件获取JSON数据到XWiki apache velocity_Java_Json_Velocity_Xwiki - Fatal编程技术网

从JAVA组件获取JSON数据到XWiki apache velocity

从JAVA组件获取JSON数据到XWiki apache velocity,java,json,velocity,xwiki,Java,Json,Velocity,Xwiki,在xwiki runnung apache中,从java组件获取JSON数据的最佳方式是什么。在我的java中 我正在编译JSONObject和JSONArray的组件,我想返回 这些数据以JSON格式发送到我的velocity脚本,这可能吗 比如: {{velocity wiki="false"}} #if("$!request.outputSyntax" != '') $response.setContentType('application/json') #en

在xwiki runnung apache中,从java组件获取JSON数据的最佳方式是什么。在我的java中 我正在编译JSONObject和JSONArray的组件,我想返回 这些数据以JSON格式发送到我的velocity脚本,这可能吗

比如:

{{velocity wiki="false"}}
    #if("$!request.outputSyntax" != '')
      $response.setContentType('application/json')
    #end
    #set($map = {})
    #set ($rightIN =  ${request.rightIN})
    #set ($spacenameIN =  ${request.spacenameIN})
#set($disgard =$map.add($services.getjsondata.javacomp($spacenameIN,$rightIN)))
    $jsontool.serialize($map)
 {{/velocity}}
Java:

      public JSONObject javacomp(String spacenameIN, String rightIN ){
              JSONObject obj = new JSONObject();
              try {
                    obj.put("spacenameIN ", spacenameIN );
                    obj.put("rightIN", rightIN );
            } catch (JSONException e) {
                    e.printStackTrace();
            }
              return obj;
      }
最后,我希望将此json对象作为从 ajax调用。这可能吗


我目前正在返回字符串,但这非常低效。我如何返回对象

在上面的代码中,Java组件返回一个
JSONObject
,但在Velocity中,您尝试将该对象直接添加到映射中,而不指定任何键

因此,您的速度代码应更改为:

#set ($map = $services.getjsondata.javacomp($spacenameIN, $rightIN))
…因为
JSONObject
实例几乎就是一个映射

在此之后,可以使用以下命令将该映射序列化为JSON:

$jsontool.serialize($map)
最后,我想以数据返回的形式访问这个json对象 来自ajax调用。这可能吗

当然,只需记住在Velocity中设置结果的内容类型,以便ajax调用将Velocity结果正确地解释为JSON,而不是常规文本。为此,您需要执行以下操作:

#set ($discard = $response.setContentType('application/json'))
我目前正在返回字符串,但这是非常低效的怎么可以 我返回对象

Java组件(脚本服务)总是将对象返回到Velocity端(它们都在服务器上执行)。如果这些对象是字符串或任何其他数据类型,则由您选择。您实际上不需要在Java组件中处理JSON序列化(您只需要注意,它们是可序列化的类型,
$jsontool
在Velocity端调用时可以处理)。在Velocity方面,您可以对这些对象执行一些操作,并将它们序列化到JOSN(最终是文本/字符串,因为这是AJAX调用所需要的,因为JavaScript是在客户端执行的)


此外,我建议您完全避免使用
JSONObject
,并使用常规的
Map
将结果传递到Velocity端。

您是否尝试运行上述代码?如果是,什么时候错了?您是否尝试只返回一个
Map'而不是JSONObject?
$jsontool`可能能够处理这个问题。