import io.norberg.rut.Router; import static java.lang.System.out; public class Example { public interface Handler { } public static void main(final String... args) { // Set up router final Router<Handler> router = Router.builder(Handler.class) .route("GET", "/users/", handler("list users")) .route("POST", "/users/", handler("create user")) .route("GET", "/users/<user>/blogs/", handler("list user blogs")) .route("POST", "/users/<user>/blogs/", handler("create user blog")) .route("GET", "/users/<user>/blogs/<blog>/posts/", handler("list user blog posts")) .route("POST", "/users/<user>/blogs/<blog>/posts/", handler("create user blog post")) .route("GET", "/users/<user>/blogs/<blog>/posts/<post>", handler("get user blog post")) .route("GET", "/static/<filename:path>", handler("get static content")) .build(); // Create a reusable routing result holder final Router.Result<Handler> result = router.result(); // Route a request router.route("POST", "/users/foo-user/blogs/b%C3%A4r-blog/posts/?q=baz&w=quux", result); assert result.isSuccess(); final Handler handler = result.target(); // Print handler name out.println("handler: " + handler); // Print captured path parameter names, raw values and uri decoded values for (int i = 0; i < result.params(); i++) { out.printf("param %d: %s=%s (%s)%n", i, result.paramName(i), result.paramValue(i), result.paramValueDecoded(i)); } // Print query out.println("query: " + result.query()); // List all allowed methods out.println("allowed methods: " + result.allowedMethods()); } private static Handler handler(final String description) { return new Handler() { @Override public String toString() { return description; } }; } }