2012-12-12 23 views
5

Tôi muốn phát triển ứng dụng RESTful khi sử dụng CRUD trong khung chơi. Rất tiếc, tôi không thể tìm thấy cách xác định DELETEPUT trong các tuyến đường của Play. Có thể chỉ có POSTGET có sẵn trong Play?Chơi khung CRUD

+0

Phiên bản nào của Chơi ? – biesior

+0

Tôi sử dụng Play 2.0.4. – Ghashange

Trả lời

5

Chơi 2.x có không phải là một mô-đun CRUD biết đến từ chi nhánh 1.x (IMHO may mắn), để xác định các tuyến đường sử dụng không phương pháp tiêu chuẩn như DELETE hoặc PUT bạn cần phải chỉ cần sử dụng phương pháp cần thiết trong các tuyến đường:

conf/tuyến:

PUT  /put-item  controllers.Application.putItem() 

Dù sao để sử dụng chúng từ các phương pháp trình duyệt khác ngoài GET hoặc POST bạn sẽ cần phải tạo ra một cuộc gọi AJAX, Có một lớn step-by-step mẫu về chủ đề này, dù sao bạn cũng có thể xây dựng nó với chung jQuery.ajax() bằng cách xác định yêu cầu type

$.ajax({ 
    type: "PUT", 
    url: "@routes.Application.putItem()", 
    data: { name: "John", location: "Boston" } 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 
+0

Cảm ơn bạn đã lấy mẫu jQuery! (+1) – atamanroman

1

Đừng quên phương pháp OPTIONS, nếu bạn sử dụng PUT hoặc DELETE từ trình duyệt web.

0

Dưới đây là những gì tôi đã làm cho Xóa và cập nhật

POST /path/:id     controllers.Controller.update(id: Integer) 
POST /path/:id/delete   controllers.Controller.delete(id: Integer) 

Và trong điều khiển chỉ

public static Result delete(Integer id) { 
    Result result = null; 
    if(id>0){ 
     //your code 
    } 
    else{ 
     result = ok("invalid id"); 
    } 
    return result; 
} 

Nó làm việc cho chúng tôi để xóa và đặt

Nếu mục đích của bạn chỉ để sử dụng là RESTFul của khung chơi và bạn đang sử dụng Java nó tốt hơn là sử dụng CXF hoặc Spring webservices hoặc Jersey. Chơi là một khuôn khổ tuyệt vời nhưng phù hợp nhất với trò chơi là scala

2

Cách tốt nhất để xác định đây là sử dụng ký tự đại diện (*) Điều này sẽ cho phép bạn sử dụng bất kỳ phương pháp http hợp lệ nào, bao gồm cả phương pháp bạn đã hỏi.

Ví dụ,

* /items/{id}    Items.display 

trong tuyến sẽ cho phép một GET/mục/15 hoặc một PUT/mục/15. Sử dụng các ký tự đại diện như thế này để làm cho định nghĩa tuyến đường của bạn đơn giản và linh hoạt hơn.

0

Đây là một bộ định tuyến ví dụ trong một ứng dụng chơi scala có sử dụng các động từ http nổi bật nhất:

GET /         controllers.Application.listProjects 
PUT  /projects/:name      controllers.Application.createProject(name: String) 
GET  /projects/list      controllers.Application.listProjects 
GET  /projects/:id      controllers.Application.projects(id: Long) 
PUT  /projects/:id/:name     controllers.Application.addTaskToProject(name: String, id: Long) 
PATCH /tasks/:id       controllers.Application.modifyTask(id: Long, color:Option[String] ?= None) 

Bạn có thể có một cái nhìn vào toàn bộ dự án ví dụ chơi scala đây: https://github.com/nemoo/play-slick3-example