有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用vertx解析查询参数?

我想检查是否可以使用getparam从下面的请求URL解析开始时间和结束时间

https://[--hostname--]/sample_app/apthroughput/getAllControllers?start_time=<start time value>&end_time=<end time value>&label=<selected label>

共 (5) 个答案

  1. # 1 楼答案

    我知道这(有点)反应迟钝,但在垂直方向。X 3.9要获取开始时间结束时间参数,可以通过以下方式获取:

    public void getAllControllersHandler(RoutingContext context) {
       Mutlimap parameters = context.request().params();
       String start_time = parameters.get("start_time");
       String end_time = parameters.get("end_time");
       // now do what you need to with retrieved values :)
    }
    

    另外,当您将端点传递给您的路由get()时(我假定您使用的是HTTP get方法),端点必须是这样:

    Router router = Router.router(vertx);
    router.get("/sample_app/apthroughput/getAllControllers").handler(this::getAllControllersHandler);
    

    希望能有帮助

    p.S.如果这解决了问题,请将其标记为已接受答案

  2. # 2 楼答案

    查询字符串的解析非常简单,除非同一查询参数有多个值

    e.g.: https://[--hostname--]/sample_app/apthroughput/getAllControllers?type=xxx&type=yyy
    

    在这种情况下,下面的代码有助于获取List<String>中的所有参数

    这个answer给出了一个想法。从中复制:

    HttpServerRequest request = RoutingContext.request();
    MultiMap params =  request.params();
    List<String> param = params.getAll("personId");
    Here you can get list of personId. URI be like
    
    localhost:8081/myApi?personId=1&personId=2&personId=3
    
  3. # 3 楼答案

    @OrkunOzen的答案很好,但MultiMap使用不区分大小写的键

    为了实现更精确的控制,您可以深入研究代码,找到从HttpServerRequest.params()->;调用的这个util函数; io.vertx.core.http.impl.HttpUtils.params(String uri)

    此代码将为您提供全面控制:

    QueryStringDecoder queryStringDecoder = new QueryStringDecoder(uri);
    Map<String, List<String>> prms = queryStringDecoder.parameters();
    
  4. # 4 楼答案

    可以获取参数字符串表示形式,但需要自己转换值

  5. # 5 楼答案

    下面是一个例子:

    public static void main(String[] args) {
    
        Vertx vertx = Vertx.vertx();
    
        HttpServer server = vertx.createHttpServer();
    
        server.requestHandler(request -> {
    
            String startTime = request.getParam("start_time");
            String endTime = request.getParam("end_time");
    
            // This handler gets called for each request that arrives on the server
            HttpServerResponse response = request.response();
            response.putHeader("content-type", "text/plain");
    
            // Write to the response and end it
            response.end(String.format("Got start time %s, end time %s", startTime, endTime));
        });
    
        server.listen(8888);
    }
    

    打开http://localhost:8888/?start_time=20161014&end_time=20161015查看结果