2013-03-29 3 views
6

Ich benutze die neue ColdFusion 10 REST API und ich möchte einen Statuscode von 201 (Erstellt) zurückgeben. Ich habe zuerst den RestSetResponse() -Ansatz ausprobiert, der hier beschrieben wird: http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html. Es funktioniert gut, außer dass Sie gezwungen sind, den Rückkehrtyp der Funktion auf "void" zu setzen. Das Problem mit "void" besteht darin, dass beim Auslösen einer Ausnahme nicht mehr die richtige JSON-Fehlermeldung zurückgegeben wird.ColdFusion 10 REST API: Wie setze ich den Statuscode 201 ohne RestSetResponse()

Werfen diese Ausnahme:

<cfthrow errorcode="400" message="Validation error." /> 

Gibt eine schön formatierte JSON, wenn der Rückgabetyp ist „Struktur“:

HTTP/1.1 400 Bad Request 
Content-Type: application/json 

{"Message":"Validation error."} 

Aber wenn der Rückgabetyp ist „leer“ (die RestSetResponse zu verwenden ist erforderlich(), die Antwort ist einige hässliche HTML-Antwort.

Aus diesem Grund musste ich zurück zu verwenden, Rückkehr Typ "struct", gab auf RestSetResponse(), und versuchte dies:

<cfheader statusCode="201" statusText="Created" /> 

Aber es funktioniert nicht. Es scheint, dass ColdFusion den statusCode überschreibt und immer 200 (OK) zurückgibt, wenn es erfolgreich ist. Wer weiß, wie man den Statuscode in 201 ändert, ohne den Rückgabetyp der Funktion auf "void" zu setzen?

+0

Können Sie keinen benutzerdefinierten Inhalt in der Antwortstruktur angeben, wie hier [http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html#articlecontentAdobe_numberedheader_3] beschrieben? – imthepitts

+0

Ich kann das nicht tun. Wie in meiner Frage erwähnt, erfordert die Verwendung von RestSetResponse(), dass der Rückkehrtyp "void" ist, was die richtige JSON-Antwort im Falle einer Ausnahme nicht mehr berücksichtigt. –

Antwort

1

Ich kann keinen guten Grund sehen, warum restSetResponse() einen Rückgabewert von void erfordern sollte, aber überprüft haben, dass es ignoriert wird, wenn dies nicht der Fall ist. Was ein bisschen Müll ist.

Die einzige Sache, die ich über Ihre Situation zu arbeiten denken kann, ist Roll-your-Own-Struktur mit dem Fehler Detail darin, dann verwenden Sie das als content Wert für den restSetResponse() Aufruf festgelegt.

Dies ist ein bisschen jerry-built, aber Sie sind in diesem Fall durch die Jerry-Build-Ness von ColdFusion eingeschränkt, denke ich.

Ich habe logged a bug in Bezug auf diese.

+0

Ich hatte Angst davor, aber ich denke, du hast Recht. –

+0

Nur FYI, ich nahm dieses Thema als Inspiration für einen Blogartikel, wenn Sie interessiert sind: http://adamcameroncoldfusion.blogspot.co.uk/2013/03/restsetresponse-requires-method-to-be.html. –

+0

Danke Adam für den ausführlichen Blogbeitrag. Ich hoffe, es dient als nützliches Artefakt für andere, die auf dasselbe Problem stoßen. –

Verwandte Themen