Как нам реализовать q параметров в Helidon SE

#java #rest #helidon

#java #остальное #helidon

Вопрос:

Я новичок в Helidon SE и хотел бы знать, есть ли способ реализовать q параметров в службе REST, созданной через Helidon SE. Любая помощь в этом отношении действительно ценится.

Спасибо, Гаурав

Ответ №1:

Если вы хотите использовать и читать параметры следующим образом, например

 http://localhost:8080/?q=testamp;k=test2
 

Затем — в случае Helidon SE — выполните следующие действия, чтобы получить эти параметры:

 private void getParam(ServerRequest request, ServerResponse response) {

    Map params = request.queryParams().toMap();
    logger.info("params: "   params);
    logger.info("q: "   params.get("q"));
    logger.info("k: "   params.get("k"));
    
    ...

}
 

Очевидно getParam , что метод настроен для пути «/».

Ответ №2:

Как мне получить параметры запроса в приложении Helidon SE: вот один пример,

HelloService.java

 public class HelloService implements Service {

    private static final JsonBuilderFactory JSON = Json.createBuilderFactory(Collections.emptyMap());

    HelloService(Config config) {
    }

    @Override
    public void update(Rules rules) {
        rules.get("/", this::getDefaultMessageHandler);
    }

    private void getDefaultMessageHandler(ServerRequest request, ServerResponse response) {
        var params = request.queryParams().toMap();
        System.out.println("name: "   params.get("name").get(0));
        System.out.println("email: "   params.get("email").get(0));

        sendResponse(response, params.get("name").get(0));
    }

    private void sendResponse(ServerResponse response, String name) {

        var returnObject = JSON.createObjectBuilder().add("name", name).build();
        response.send(returnObject);
    }

}
 

Главная

 public class HelidonSeRestHelloWorldApplication {

    public static void main(final String[] args) {
        startServer();
    }

    private static Single<WebServer> startServer() {

        var config = Config.create();
        var server = WebServer.builder(createRouting(config)).config(config.get("server"))
                .addMediaSupport(JsonpSupport.create()).build();
        var webserver = server.start();

        webserver.thenAccept(ws -> {
         System.out.println("Web server started! http://localhost:"   ws.port()   "/hello");
    
            ws.whenShutdown().thenRun(() -> System.out.println("Web server is down!"));
        }).exceptionallyAccept(t -> {
            System.out.println("Web startup failed: "   t.getMessage());
        });

        return webserver;
    }

    private static Routing createRouting(Config config) {

        var helloService = new HelloService(config);

        return Routing.builder()

                .register("/hello", helloService).build();
    }
}
 

application.properties

 server.port=9080
 

Запустите приложение и нажмите http://localhost:9080/hello?name=alphaamp;email=alpha@alpha.alpha

Вывод на консоль:

 name: alpha
email: alpha@alpha.alpha
 


Как мне получить параметры пути в приложении Helidon SE:

Главная

 public class HelidonSeRestHelloWorldApplication {

    ...........................
    ...........................

    private static Routing createRouting(Config config) {

        var helloService = new HelloService(config);

        return Routing.builder()

                .register("/hello/{name}", helloService).build();
    }
}
 

HelloService.java

     public class HelloService implements Service {

    ............
    ...........
    private void getDefaultMessageHandler(ServerRequest request, ServerResponse response) {
        var name = request.path().absolute().param("name");
        System.out.println(name);

        sendResponse(response, name);
    }

    .................
    .................

}
 

Запустите приложение и нажмите: http://localhost:9080/hello/alpha