2013-04-09 22 views
19

Tôi rất mới vào khung chơi java. Tôi đã thiết lập tất cả các tuyến đường bình thường như/something /: somthingValue và tất cả các tuyến khác. Bây giờ tôi muốn tạo ra con đường chấp nhận tham số truy vấn nhưLàm cách nào để nhận các tham số chuỗi truy vấn trong khung công tác chơi java?

/cái gì? X = 10 & y = 20 & z = 30

Ở đây tôi muốn để có được tất cả các params sau "?" như cặp khóa ==> giá trị.

Trả lời

32

Bạn có thể dây trong tham số truy vấn của bạn vào các tuyến đường file:

http://www.playframework.com/documentation/2.0.4/JavaRouting trong phần "Parameters với các giá trị mặc định"

Hoặc bạn có thể yêu cầu cho họ trong hành động của bạn:

public class Application extends Controller { 

    public static Result index() { 
     final Set<Map.Entry<String,String[]>> entries = request().queryString().entrySet(); 
     for (Map.Entry<String,String[]> entry : entries) { 
      final String key = entry.getKey(); 
      final String value = Arrays.toString(entry.getValue()); 
      Logger.debug(key + " " + value); 
     } 
     Logger.debug(request().getQueryString("a")); 
     Logger.debug(request().getQueryString("b")); 
     Logger.debug(request().getQueryString("c")); 
     return ok(index.render("Your new application is ready.")); 
    } 
} 

Ví dụ: http://localhost:9000/?a=1&b=2&c=3&c=4 bản in trên bảng điều khiển:

[debug] application - a [1] 
[debug] application - b [2] 
[debug] application - c [3, 4] 
[debug] application - 1 
[debug] application - 2 
[debug] application - 3 

Lưu ý rằng c là hai lần trong url.

+0

Tôi không thể nhìn thấy phương pháp getQueryString() yêu cầu(). có phải vì tôi đang sử dụng play 2.0 và bạn đang sử dụng 2.0.4? – Sadik

+0

Bạn nói đúng, http://www.playframework.com/documentation/api/2.0/java/play/mvc/Http.Request.html không chứa getQueryString() nhưng request(). QueryString() có thể cung cấp cho bạn tất cả bạn cần. – Schleichardt

+0

Cảm ơn rất nhiều người. bạn có thể gợi ý cho tôi một số hướng dẫn hay về nó không? Ngoại trừ tài liệu của nó. – Sadik

7

Bạn có thể nhận được tất cả các thông số chuỗi truy vấn như một bản đồ:

Controller.request().queryString() 

Phương pháp này trả về một đối tượng Map<String, String[]>.

0

Trong Java/Play 1.x bạn nhận được chúng với:

Request request = Request.current(); 
    String arg1 = request.params.get("arg1"); 

    if (arg1 != null) { 
     System.out.println("-----> arg1: " + arg1); 
    } 
9

Trong Chơi 2.5.x, nó được thực hiện trực tiếp trong conf/routes, nơi người ta có thể đặt giá trị mặc định:

# Pagination links, like /clients?page=3 
GET /clients    controllers.Clients.list(page: Int ?= 1) 

Trong trường hợp của bạn (khi sử dụng dây)

GET /something   controllers.Somethings.show(x ?= "0", y ?= "0", z ?= "0") 

Khi sử dụng gõ mạnh:

GET /something   controllers.Somethings.show(x: Int ?= 0, y: Int ?= 0, z: Int ?= 0) 

Xem: https://www.playframework.com/documentation/2.5.x/JavaRouting#Parameters-with-default-values để được giải thích dài hơn.

0

Bạn có thể sử dụng FormFactory:

DynamicForm requestData = formFactory.form().bindFromRequest(); 
String firstname = requestData.get("firstname"); 
Các vấn đề liên quan