Tôi đang triển khai api trên web bằng cách sử dụng khung chơi scala 2.0.2. Tôi muốn trích xuất và xác nhận một số thông số nhận được. Và cho điều này tôi đang sử dụng một "hình thức" chơi cho phép tôi xác định các trường tùy chọn.Làm cách nào để xác định các trường tùy chọn giá trị mặc định trong biểu mẫu khung phát?
Sự cố: Đối với các trường tùy chọn đó, tôi cần xác định giá trị mặc định nếu thông số không được chuyển. Mã này được thiết kế để phân tích một cách chính xác những trường hợp này ba sử dụng:?
- /kiểm tra đầu = abc (lỗi, abc không phải là một số nguyên)
- /kiểm tra đầu = 123 (có giá trị, hàng đầu là 123)
- /kiểm tra (có giá trị, hàng đầu là 42 (giá trị mặc định))
tôi đã đưa ra đoạn mã sau:
def test = Action {
implicit request =>
case class CData(top:Int)
val p = Form(
mapping(
"top" -> optional(number)
)((top) => CData($top.getOrElse(42))) ((cdata:CData) => Some(Some(cdata.top)))
).bindFromRequest()
Ok("all done.")
}
Mã hoạt động, nhưng nó chắc chắn không thanh lịch. Có rất nhiều tấm nồi hơi đang diễn ra chỉ để thiết lập một giá trị mặc định cho một tham số yêu cầu bị thiếu.
Có ai có thể đề xuất giải pháp sạch hơn và hợp lý hơn không?
Giải pháp được đề xuất này hoạt động tốt. Nhược điểm duy nhất của giải pháp này không may là nó không quy mô tốt với một số lượng lớn các tham số mặc định. Khi bạn xây dựng một dịch vụ web/ứng dụng web phải hỗ trợ lọc danh sách, việc hiển thị tất cả các thông số mặc định trong tuyến đường có thể làm giảm khả năng đọc và độ mạnh của mã.Trong tất cả các kịch bản khác, đây thực sự là giải pháp ưa thích – natbusa
Trả lời được cập nhật với triển khai phương pháp trợ giúp bạn có thể thấy hữu ích. – lambdas
Tôi đã đề xuất một phần mở rộng cho khung chơi, để lập trình một cách tiếp cận hướng mã hơn về các tham số mặc định. Xem https://github.com/playframework/Play20/pull/381 – natbusa