2013-03-29 34 views
6

Tôi đang sử dụng API REST tích hợp mới của ColdFusion 10 và tôi muốn trả về mã trạng thái 201 (Đã tạo). Lần đầu tiên tôi thử phương thức RestSetResponse() được mô tả ở đây: http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html. Nó hoạt động tốt, ngoại trừ việc nó buộc bạn thiết lập returntype của hàm thành "void". Vấn đề với "void" là bất cứ khi nào tôi ném một ngoại lệ, nó không còn trả về thông báo lỗi JSON thích hợp nữa.API REST ColdFusion 10: Cách đặt mã trạng thái 201 mà không có RestSetResponse()

Ném ngoại lệ này:

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

Trả về một JSON định dạng đẹp khi returntype là "struct":

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

{"Message":"Validation error."} 

Nhưng khi returntype là "khoảng trống" (đó là cần thiết để sử dụng RestSetResponse(), phản hồi là một số phản hồi HTML xấu xí

Vì điều này, tôi phải hoàn nguyên bằng cách sử dụng lại "struct", đã từ bỏ RestSetResponse() và đã thử điều này:

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

Nhưng nó không hoạt động. Có vẻ như ColdFusion ghi đè mã trạng thái và luôn trả về 200 (OK) khi thành công. Bất cứ ai biết một cách để thay đổi mã trạng thái thành 201 mà không cần thiết lập lại chức năng của hàm để "void"?

+0

Bạn không thể chỉ định nội dung tùy chỉnh trong cấu trúc phản hồi như được mô tả [ở đây] (http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html#articlecontentAdobe_numberedheader_3)? – imthepitts

+0

Tôi không thể làm điều đó. Như đã đề cập trong câu hỏi của tôi, sử dụng RestSetResponse() yêu cầu rằng returntype là "void", mà không còn tôn trọng phản ứng JSON thích hợp trong trường hợp ngoại lệ. –

Trả lời

1

Tôi không thể thấy lý do chính đáng tại sao restSetResponse() phải yêu cầu một loại bỏ sót lại, nhưng đã xác minh nó bị bỏ qua nếu điều này không đúng. Đó là một chút rác rưởi.

Điều duy nhất tôi có thể suy nghĩ bằng cách làm việc xung quanh tình huống của bạn là cuộn cấu trúc của riêng bạn với chi tiết lỗi trong đó, sau đó sử dụng giá trị content cho cuộc gọi restSetResponse().

Đây là một chút jerry-xây dựng, nhưng bạn đang bị ràng buộc bởi jerry-xây dựng-ness của ColdFusion trong trường hợp này, tôi nghĩ.

Tôi đã logged a bug liên quan đến điều này.

+0

Tôi sợ điều này, nhưng tôi nghĩ bạn nói đúng. –

+0

Chỉ cần thông tin, tôi lấy vấn đề này làm nguồn cảm hứng cho một bài viết trên blog, nếu bạn quan tâm: http://adamcameroncoldfusion.blogspot.co.uk/2013/03/restsetresponse-requires-method-to-be.html. –

+0

Cảm ơn Adam về bài đăng chi tiết trên blog. Tôi hy vọng nó phục vụ như là một tạo tác hữu ích cho những người khác gặp phải vấn đề tương tự. –

Các vấn đề liên quan