[英]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.