我正在使用Spark框架来支持我的后端 Restful API。
从我读过的所有示例中,所有请求都在该main
方法中处理。有没有办法可以将不同的请求处理程序分成不同的类,就像Servlet的方式一样,以便代码结构看起来更好。
我正在使用Spark框架来支持我的后端 Restful API。
从我读过的所有示例中,所有请求都在该main
方法中处理。有没有办法可以将不同的请求处理程序分成不同的类,就像Servlet的方式一样,以便代码结构看起来更好。
首先,正如@gurpreet 所写,您可以创建一个服务器对象,从而将路由从主例程转移到服务器类的方法中。这为您提供了清洁代码的第一步。
但是我想您想将在路由处理程序中完成的逻辑提取到不同的对象中。为此,您可以定义一个类,在这里我将其命名为 SampleResource,它具有两种方法:
public class SampleResource {
public Object methodOne(Request request, Response response) throws Exception {
// do something useful to create you result object
return result;
}
public Object methodTwo(Request request, Response response) throws Exception {
// do something useful to create you result object
return result;
}
}
在您的主 Server 类中,您可以通过使用方法引用来实例化和使用 SampleResource:
res = new SampleResource();
get("/one", res::methodOne);
get("/two", res::methodTwo);
因此,您可以将应用程序的逻辑分组到资源类中,这是一种更类似于经典 JAX-RS 注释资源类的方法。
是的,当然,如果你愿意,你可以完全面向对象。这是一个示例类供您构建。
import static spark.Spark.*;
/**
* Defines a "server" which is a wrapper for
* the client to easily communicate with.
*/
public class Server {
// Main entry point
public static void main(String[] args) {
// Let's go object oriented.
new Server();
}
/**
* Loads necessary server .
*/
Server() {
// This equals "resources/public"
// using maven
staticFileLocation("/public");
// Setup routes
defineRoutes();
}
/**
* Define your routes in here
*/
private void defineRoutes() {
// Lands on homepage
get("/", (request, response) -> {
// ...
}
post("/foo", (request, response) -> {
// ...
}
}
}