So I've been writing lots of REST web services lately with Railo 4.0 and noticed a strange issue / feature when returning json.
So I write me a nice little function and I think everything will work with a little CFML magic:
<cffunction name="getmuppets" access="remote" returntype="string" httpmethod="GET" restpath="/getmuppets">
<cfscript>
var arrMuppets = [
{name = "kermit", age = 20},
{name = "fuzzy", age = 30},
{name = "animal", age = 40}
];
return serializeJson(arrMuppets)
</cfscript>
</cffunction>
All good? No :( The json is fine when you call the function locally, but when you call it as a rest webservice all the double quotes get escaped. Which renders it invalid json and is not much use for anything.
"[{\"age\":20,\"name\":\"kermit\"},{\"age\":30,\"name\":\"fuzzy\"},{\"age\":40,\"name\":\"animal\"}]"
So I eventually figured out you've got to change the headers and content returned by the function.
<cffunction name="getmuppets" access="remote" produces="application/json" httpmethod="GET" restpath="/getmuppets">
<cfscript>
var arrMuppets = [
{name = "kermit", age = 20},
{name = "fuzzy", age = 30},
{name = "animal", age = 40}
];
response = {
status = 200,
headers = {},
content = serializeJson(arrMuppets)
};
restSetResponse(response);
</cfscript>
</cffunction>
Once you do all that, you get valid json:
[{"age":20,"name":"kermit"},{"age":30,"name":"fuzzy"},{"age":40,"name":"animal"}]