2

REST Webサービスに取り組んでいますが、coldfusion Webサービスの経験はあまりありません。これは非常に基本的なWebサービスです。何が間違っているのか教えてください。それは大きな助けになります。

アプリケーションサーバー: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\"]]}"

ループで [DATA] 値を取得しようとしています

<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]> 出力

4

1 に答える 1

1

まず、クエリを返すので、に設定returnTypeする必要がありますQuery

toproducesの属性を設定した場合、データを返す際に明示的な JSON シリアル化を実行する必要はありません。ColdFusion が自動的に実行します。あなたはただ書くことができます:cffunctionapplication/json

<cfreturn Qry />

サービスから返された結果を読み取るには、データを逆シリアル化する必要があります。このような:

<cfdump var="#deserializeJson(res.filecontent)#"> 
于 2015-11-30T22:16:13.183 に答える