Skip to main content

Routing

Jazzy's routing system provides an easy way to connect HTTP requests to appropriate controller methods. This document explains route definition, HTTP methods, and URL parameter usage.

Basic Routing

In Jazzy, routing is managed by the Router class. Routes are created using HTTP method-specific definition methods.

HTTP Method-Based Route Definition

Router router = new Router();

// Define route for GET method
router.GET("/users/{id}", "getUserById", UserController.class);

// Define route for POST method
router.POST("/users", "createUser", UserController.class);

// Define route for PUT method
router.PUT("/users/{id}", "updateUser", UserController.class);

// Define route for DELETE method
router.DELETE("/users/{id}", "deleteUser", UserController.class);

HTTP Methods

Jazzy supports the following HTTP methods:

  • GET: Retrieve a resource
  • POST: Create a new resource
  • PUT: Update an existing resource
  • DELETE: Delete a resource

URL Parameters

In Jazzy, URL parameters are defined using the {parameter_name} format:

router.GET("/users/{id}", "getUserById", UserController.class);

You can access these parameters from your controller method:

public Response getUserById(Request request) {
String id = request.path("id");
// Process using id
return response().json("id", id, "name", "John Doe");
}

Query Parameters

Query parameters are taken directly from the URL and can be accessed from the Request object:

public Response getAllUsers(Request request) {
int page = request.queryInt("page", 1); // Default value 1
int limit = request.queryInt("limit", 10); // Default value 10
String sortBy = request.query("sort_by", "name");
String sortOrder = request.query("sort_order", "asc");

// Filter data using page and limit
return response().json(
"page", page,
"limit", limit,
"sort", JSON.of(
"by", sortBy,
"order", sortOrder
),
"users", getUserList(page, limit)
);
}

Path Patterns

The Router considers path parameters when matching defined routes. For example:

  • /users → Exact match
  • /users/{id} → Parameterized match (e.g., /users/123)

If you define multiple routes with the same type and path, the first defined route is used.

Controller Methods

In Jazzy, controller methods must have the following signature:

public Response methodName(Request request) {
// Operations
return response;
}

Each controller method takes a Request object and returns a Response object.

Example: Comprehensive Routing

Below is a comprehensive example showing different routes:

// Config and Router setup
Config config = new Config();
config.setServerPort(8088);
config.setEnableMetrics(true); // "/metrics" endpoint is automatically added

Router router = new Router();

// User routes
router.GET("/users/{id}", "getUserById", UserController.class);
router.GET("/users", "getAllUsers", UserController.class);
router.POST("/users", "createUser", UserController.class);
router.PUT("/users/{id}", "updateUser", UserController.class);
router.DELETE("/users/{id}", "deleteUser", UserController.class);
router.POST("/users/with-rules", "createUserWithRules", UserController.class);

// Product routes
router.GET("/products/{id}", "getProduct", ProductController.class);
router.GET("/products", "listProducts", ProductController.class);
router.POST("/products", "createProduct", ProductController.class);
router.PUT("/products/{id}", "updateProduct", ProductController.class);
router.DELETE("/products/{id}", "deleteProduct", ProductController.class);
router.POST("/products/with-rules", "createProductWithRules", ProductController.class);

// Start the server
Server server = new Server(router, config);
server.start(config.getServerPort());

Controller examples:

public class UserController {
// Basic CRUD operations
public Response getUserById(Request request) {
String id = request.path("id");
return response().json("id", id, "name", "John Doe");
}

public Response getAllUsers(Request request) {
int page = request.queryInt("page", 1);
return response().json("users", JSON.array(), "page", page);
}

public Response createUser(Request request) {
// Validation and registration operations
return response().success("User created successfully");
}

public Response updateUser(Request request) {
String id = request.path("id");
return response().success("User updated successfully");
}

public Response deleteUser(Request request) {
String id = request.path("id");
return response().success("User deleted successfully");
}
}

Next Steps