Cách thích hợp để khai báo tham số truy vấn tùy chọn, với giá trị mặc định, khi sử dụng compojure-api
là gì?Tham số truy vấn tùy chọn (có giá trị mặc định) với compojure-api
Một trong những yếu tố con đường của tôi là như sau (sau khi đọc this):
(GET "/:id/descendants" [id]
:return [d/CategoryTreeElement]
:path-params [id :- Long]
:query-params [context-type :- d/ContextType
levels :- Integer
{tenant :- d/Tenant :DEF_TENANT}
{show-future :- Boolean false}
{show-expired :- Boolean false}
{show-suppressed :- Boolean false}
:summary "Fetch category descendants"
(ok ...))
Lúc đầu params boolean nơi định nghĩa là những người khác (ví dụ show-future Boolean
) nhưng Swagger UI tạo được trình bày chúng như là một combobox với giá trị true
làm mặc định. Trong biểu mẫu hiện tại, giao diện người dùng hiển thị hộp tổ hợp không có tùy chọn nào được chọn. Điều tương tự cũng xảy ra với người thuê nhà.
Một câu hỏi phụ: khi tôi sử dụng giao diện người dùng được tạo Swagger để gửi yêu cầu và lỗi được trả về: "levels": "(not (instance? java.lang.Integer \"2\"))"
. Tại sao vậy? Không phải là thư viện phải ép buộc/chuyển đổi các giá trị chuỗi thành các loại được chỉ định do API tuyên bố?
Xin cảm ơn trước.
Cảm ơn bạn đã trả lời. Vì vậy, về tham số tùy chọn boolean, nó không quan trọng nếu tôi xác định một giá trị mặc định, vì giá trị mặc định không được chọn trên giao diện người dùng. –
@ matheus.emm Bạn phải chỉ định giá trị tham số mặc định nếu bạn muốn nó là tùy chọn. Nếu không, Swagger UI sẽ buộc bạn chọn một trong các giá trị ('true' hoặc' false') và nếu bạn gửi yêu cầu mà không chỉ định giá trị cho tham số truy vấn đó, bạn sẽ nhận được lỗi xác thực lược đồ. Giá trị mặc định là bắt buộc để tham số của bạn có giá trị hợp lệ được chỉ định (theo lược đồ của bạn) nếu nó không được cung cấp bởi người gọi. –
@ matheus.emm Tôi đã cập nhật câu trả lời với thông tin về cách xử lý cưỡng ép 'Integer'. –