簡體   English   中英

從JAVA組件獲取JSON數據到XWiki apache velocity

[英]Get JSON data from JAVA component to XWiki apache velocity

從xwiki runnung apache中的java組件獲取JSON數據的最佳方法是什么。 在我的Java組件中,我正在編譯JSONObjects和JSONArrays,我想將此數據以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端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM