Well, I think spark-java is for people who don't need tons of extra tweaks.
So, I just add and add an extra method to the controllers named DeclareRoutes, where I put the declarations.
For an example application:
public class LoginController { public static void declareRoutes(){ get(Path.Web.LOGIN, LoginController.serveLoginPage); post(Path.Web.LOGIN, LoginController.handleLoginPost); post(Path.Web.LOGOUT, LoginController.handleLogoutPost); } public static Route serveLoginPage = (Request request, Response response) -> { Map<String, Object> model = new HashMap<>(); model.put("loggedOut", removeSessionAttrLoggedOut(request)); model.put("loginRedirect", removeSessionAttrLoginRedirect(request)); return ViewUtil.render(request, model, Path.Template.LOGIN); };
So, in my application, I initialize all routes as follows:
// Routes Class[] controllers = { IndexController.class, LoginController.class, SandboxController.class, ServicesController.class }; for (Class controller: controllers) { Method m = controller.getMethod("declareRoutes"); m.invoke(m); } // Catch all declareCatchAllRoute();
DeclareCatchAllRoute () is simple:
private void declareCatchAllRoute() { get("*", ViewUtil.notFound); }
It works well enough for my needs, it does not require any new abstraction.
NTN
source share