I am new to Helidon SE and would like to know if there is a way to implement q params in REST service created via Helidon SE. Any help in this regard is truly appreciated.
Thanks, Gaurav
If you want to use and read params in the following way e.g.
http://localhost:8080/?q=test&k=test2
Then -in case of Helidon SE- do the following to get those parameters:
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"));
...
}
Obviously the getParam
method is configured for "/" path.
How do I retrieve query parameters in a Helidon SE application: Here is one example,
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);
}
}
Main
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
Run the application and hit http://localhost:9080/hello?name=alpha&email=alpha@alpha.alpha
Console output:
name: alpha
email: alpha@alpha.alpha
++ How do I retrieve path parameters in a Helidon SE application:
Main
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);
}
.................
.................
}
Run the application and hit: http://localhost:9080/hello/alpha