2013-03-29 11 views
6

ColdFusion 10の新しい組み込みREST APIを使用しています。ステータスコード201(Created)を返したいと思います。私は最初にここで説明したRestSetResponse()アプローチを試しました:http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html。関数のreturntypeを "void"に設定することを強制する点を除いて、うまくいきます。 "void"の問題は、例外をスローするたびに適切なJSONエラーメッセージが返されなくなることです。この例外をスローColdFusion 10 REST API:RestSetResponse()を使用せずにステータスコード201を設定する方法

:RestSetResponseを使用するために必要とされる(

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

{"Message":"Validation error."} 

しかし、戻り値のは、 "無効" のとき:returntypeには、 "構造体" であるとき

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

はきれいにフォーマットJSONを返します。 ()、レスポンスは醜いHTMLレスポンスです

このため、私はreturntype "struct"を使ってRestSetResponse()をあきらめて、これを試してみました:

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

しかし、動作しません。 ColdFusionはstatusCodeを上書きし、成功した場合は常に200(OK)を返します。関数のreturntypeを "void"に設定せずにステータスコードを201に変更する方法を知っている人はいますか?

+0

[ここ](http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html#articlecontentAdobe_numberedheader_3)に記載されているように、レスポンス構造体にカスタムコンテンツを指定することはできませんか? – imthepitts

+0

私はそれを行うことはできません。私の質問で述べたように、RestSetResponse()を使うにはreturntypeが "void"である必要があります。これはもはや例外の場合に適切なJSONレスポンスを尊重しません。 –

答えて

1

restSetResponse()にはreturntypeのvoidが必要な理由はありませんが、そうでない場合は無視されます。これは少しゴミです。

あなたの状況を回避する方法として考えることができる唯一の事柄は、エラーの詳細が記述されたロールを自分のロールに入れて、それをrestSetResponse()呼び出しのcontent値として使用することです。

これはちょっとしたことですが、このインスタンスでは、ColdFusionのjerry-built-nessに制約があります。

私はこれに関連してlogged a bugです。

+0

私はこれを恐れていましたが、あなたが正しいと思います。 –

+0

興味があれば、この記事をブログ記事のインスピレーションとして取り上げました:http://adamcameroncoldfusion.blogspot.co.uk/2013/03/restsetresponse-requires-method-to-be.html。 –

+0

詳細なブログ記事のアダムに感謝します。この同じ問題に遭遇した他の人にとって役に立つアーティファクトとして役立つことを願っています。 –

関連する問題