【发布时间】:2016-03-04 12:51:40
【问题描述】:
在 REST 网络服务上工作,我没有太多的冷融合网络服务经验。这是非常基本的网络服务。如果你们能指出我,我做错了什么。这将是很大的帮助。
应用服务器:Lucee 4.5.2.018 (Linux)
请在下面找到我的代码。
组件-功能/网络服务。
<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>
调用网络服务
<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]>
【问题讨论】:
-
你不是将对象序列化为 JSON 字符串吗?如果是这样,ReturnType 应该是“字符串”。您还可以将 ReturnType 设置为“JSON”而不使用 SerializeJSON 函数。根据 CF 的版本,您可能还需要考虑使用 JSONUtil github.com/CFCommunity/jsonutil
-
我只是在做 serializeJSON() 它返回字符串吗?我没有在任何地方投射。我也试过返回时间 JSON 不起作用
标签: mysql web-services coldfusion railo lucee