Tôi đã (OData) truy vấn params quy định tại tuyến đường của tôi như vậy:akka http không xử lý các thông số có dấu hiệu đô la đúng cách?
parameters(('$top.as[Int].?, '$skip.as[Int].?)) { (top, skip) =>
Tôi có xử lý từ chối sau đây để xử lý tất cả các thông số không hợp lệ (handleAll):
RejectionHandler.newBuilder()
.handleAll[MalformedQueryParamRejection] { paramRejections =>
// paramRejections is a Seq[MalformedQueryParamRejection]
...
}
Vấn đề là khi gọi với những điều sau đây
some-endpoint?$top=invalid&$skip=invalid
các paramRejections
trong xử lý sự từ chối có 2 mục, cả cho $ đầu, thay vì một cho $ đầu và một cho $ bỏ qua.
Dường như liên quan đến ký hiệu đô la trên các thông số, vì khi tôi xóa những thứ này hoạt động như mong đợi. Đây có phải là sự cố đã biết hoặc có giải pháp thay thế không (không bao gồm xóa ký hiệu đô la)? Lưu ý, có vẻ như nó chỉ là trình xử lý từ chối có vấn đề với nhiều tham số bắt đầu bằng ký hiệu đô la, vì dòng này trong tuyến đường chỉ định chính xác hàng đầu và bỏ qua các biến khi $ top và $ skip được cung cấp hợp lệ giá trị trong URI:
parameters(('$top.as[Int].?, '$skip.as[Int].?)) { (top, skip) =>
Liệu trăm mã hóa giúp đỡ với vấn đề này? '% 24top =' thay vì '$ top ='. Ký hiệu đô la được dành riêng dưới dạng phân tách phụ và được phân tích cú pháp đúng chỉ khi phần trăm được mã hóa. Nó hoạt động tốt trong bản tái tạo của tôi. –
Không, khách hàng nên được phép sử dụng ký hiệu đô la, theo tiêu chuẩn OData: http://www.odata.org/documentation/odata-version-2-0/uri-conventions/ – Rory
@chunjef không liên quan, tất cả đều quan trọng là paramRejections cung cấp để handleAll là không chính xác, như được mô tả trong câu hỏi của tôi – Rory