2015-11-30 56 views
2

工作在REST網絡服務上,我沒有太多的經驗coldfusion web-services.It是非常基本的web服務。請如果你們可以指點我,我做錯了什麼。這將是很大的幫助。Coldfusion Lucee 4.5.2.018(Linux) - REST服務(不能強制轉換字符串)JSON

應用服務器:Lucee 4.5.2.018(Linux)的

請在下面找到我的代碼。

組件功能/ Web服務。

<cfcomponent rest="true" restpath="/hello">

<cffunction name="formPost" access="remote" returnType="struct" httpMethod="POST" restPath="/name" hint="POST Method" produces="application/json"> 
      <cfargument name="firstname" type="String" restArgSource="Form"> 
      <cfargument name="lastname" type="String" restArgSource="Form"> 
     <cfset myStruct = structnew()> 
      <cfset myStruct.FirstName = firstname> 
      <cfset myStruct.LastName = lastname> 

      <cfquery name="Qry" datasource="myDSN"> 
       select col1,col2 from myTableData 
      </cfquery> 
      <cfset myJsonVar = serializeJSON(Qry) /> 
      <cfreturn myJsonVar> 
    </cffunction> 
</cfcomponent> 

調用Web服務

<cfhttp url="http://mydev:8888/rest/Example/hello/name" method="POST" result="res" port="8888" > 
     <cfhttpparam type="header" name="Accept" value="application/json"> 
     <cfhttpparam type="formfield" name="firstname" value="Dan"> 
     <cfhttpparam type="formfield" name="lastname" value="Gates"> 
</cfhttp> 
<cfdump var="#res#"> 

問題: 當定義returnType="struct"錯誤string can't cast String [{"COLUMNS":["COL1","COL2"],"DATA":[["0","7777777"],["0","888888"]]}] to a value of type [struct]

定義當returnType="string"沒有錯誤來"{\"COLUMNS\":[\"COL1\",\"COL2\"],\"DATA\":[[\"0\",\"7777777\"],[\"0\",\"888888\"]]}"

試圖獲得環[數據]值

<cfloop from="1" to="#ArrayLen(d.DATA)#" index="i"> <cfloop from="1" to=#ArrayLen(d.DATA[i])# index="j"> <cfset resultSrt =d.COLUMNS[j]&" = " &d.DATA[i][j]> #resultSrt#<br> </cfloop> </cfloop>

消息:No matching property [DATA] found in [string] 堆棧跟蹤:The Error Occurred in /opt/lucee/tomcat/webapps/ROOT/calling.cfm: line 52 50: 51: 52: <cfloop from="1" to="#ArrayLen(d.DATA)#" index="i"> 53: <cfloop from="1" to=#ArrayLen(d.DATA[i])# index="j"> 54: <cfset resultSrt =d.COLUMNS[j]&" = " &d.DATA[i][j]> Output

+1

不是你序列化一個對象作爲JSON字符串嗎?如果是這樣,ReturnType應該是「字符串」。您也可以將ReturnType設置爲「JSON」,而不是使用SerializeJSON函數。根據CF的版本,你可能也想考慮使用JSONUtil https://github.com/CFCommunity/jsonutil –

+0

我只是在做serializeJSON()它會返回字符串嗎?我不會在任何地方投射我也試過返回時JSON沒有工作 – IBM

回答

1

首先,因爲你正在返回的查詢,你應設置returnTypeQuery

如果您已將cffunctionproduces屬性設置爲application/json,那麼在這種情況下,您不需要在返回數據時執行顯式JSON序列化。 ColdFusion會自動爲你做。你可以寫:

<cfreturn Qry /> 

要讀取服務返回的結果,你需要反序列化數據。像這樣:

<cfdump var="#deserializeJson(res.filecontent)#"> 
+0

感謝您的迴應,我說你仍然給我的字符串輸出。讓我清楚一個想法,當它在CF10應用程序服務器運行相同的代碼,它正在工作發現它給了我返回數組 – IBM

+0

*我照你說的仍然給我的字符串輸出做*我修改你的代碼完全按Pankaj描述,它完美地與Lucee 。我懷疑你忘了刷新,或者按照這些方法。 – Leigh

+0

@Leigh我剛剛上傳了我的輸出顯示字符串。我想要數據...我怎麼做獨立的數據?我應該使用find()函數來選擇我需要的值嗎? – IBM

相關問題