2013-03-29 11 views
6

Używam nowego wbudowanego interfejsu REST API ColdFusion 10 i chciałbym zwrócić kod statusu 201 (utworzony). Najpierw wypróbowałem metodę RestSetResponse() opisaną tutaj: http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html. Działa dobrze, z wyjątkiem tego, że zmusza do ustawienia returntype funkcji na "void". Problem z "void" polega na tym, że ilekroć wyrzucam wyjątek, nie zwraca on już poprawnego komunikatu o błędzie JSON.ColdFusion 10 REST API: jak ustawić kod statusu 201 bez RestSetResponse()

rzucanie ten wyjątek:

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

Zwraca ładnie sformatowany JSON gdy returntype jest "struktura":

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

{"Message":"Validation error."} 

ale gdy returntype jest "void" (co jest wymagane do korzystania RestSetResponse(), odpowiedzią jest jakaś brzydka odpowiedź HTML:

Z tego powodu musiałem powrócić do użycia returntype "struct", zrezygnowałem z RestSetResponse() i wypróbowałem to:

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

Ale to nie działa. Wygląda na to, że ColdFusion nadpisuje kod statusu i zawsze zwraca 200 (OK), kiedy się powiedzie. Ktoś wie, w jaki sposób zmienić kod statusu na 201, bez ustawiania returntype funkcji na "void"?

+0

Nie możesz określić niestandardowej zawartości w strukturze odpowiedzi, jak opisano [tutaj] (http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html#articlecontentAdobe_numberedheader_3)? – imthepitts

+0

Nie mogę tego zrobić. Jak wspomniano w moim pytaniu, użycie RestSetResponse() wymaga, aby returntype było "void", które nie honoruje właściwej odpowiedzi JSON w przypadku wyjątku. –

Odpowiedz

1

Nie widzę dobrego powodu, dla którego restSetResponse() wymagałby returntype pustki, ale zweryfikowali, że jest to ignorowane, jeśli tak nie jest. Co jest trochę śmieci.

Jedyne, co mogę zrobić, aby poradzić sobie z sytuacją, to wstawić własną strukturę ze szczegółami błędu, a następnie użyć jej jako wartości content ustawionej dla połączenia restSetResponse().

Jest nieco jerry-built, ale jesteś constrainted przez jerry-wbudowanym Ness ColdFusion w tym przypadku, myślę.

Mam logged a bug w związku z tym.

+0

Bałem się tego, ale myślę, że masz rację. –

+0

Wystarczy FYI, wziąłem tę kwestię jako inspiracji na blogu, jeśli jesteś zainteresowany: http://adamcameroncoldfusion.blogspot.co.uk/2013/03/restsetresponse-requires-method-to-be.html. –

+0

Dziękuję Adamowi za szczegółowy wpis na blogu. Mam nadzieję, że będzie to użyteczny artefakt dla tych, którzy napotykają ten sam problem. –

Powiązane problemy