25

我对 java play 框架很陌生。我已经设置了所有正常路线,例如 /something/:somthingValue 和所有其他路线。现在我想创建接受查询参数的路由,例如

/某事?x=10&y=20&z=30

在这里,我想获取“?”之后的所有参数。作为键==>值对。

4

5 回答 5

37

您可以将查询参数连接到路由文件中:

http://www.playframework.com/documentation/2.0.4/JavaRouting在“具有默认值的参数”部分

或者您可以在您的操作中请求它们:

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."));
    }
}

例如http://localhost:9000/?a=1&b=2&c=3&c=4控制台上的打印:

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

请注意,这c是 url 中的两次。

于 2013-04-09T18:04:06.953 回答
20

在 Play 2.5.x 中,它是直接在 中制作的conf/routes,可以在其中放置默认值:

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

在您的情况下(使用字符串时)

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

使用强类型时:

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

有关详细说明,请参阅:https ://www.playframework.com/documentation/2.5.x/JavaRouting#Parameters-with-default-values 。

于 2016-08-07T23:00:58.807 回答
9

您可以将所有查询字符串参数作为 Map:

Controller.request().queryString()

此方法返回一个Map<String, String[]>对象。

于 2014-11-01T12:10:26.897 回答
0

Java/Play 1.x你得到他们:

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

    if (arg1 != null) {
        System.out.println("-----> arg1: " + arg1);
    } 
于 2016-02-26T15:29:25.240 回答
0

您可以使用FormFactory

DynamicForm requestData = formFactory.form().bindFromRequest();
String firstname = requestData.get("firstname");
于 2018-01-05T21:20:53.963 回答