0

我正在使用Spark框架来支持我的后端 Restful API。

从我读过的所有示例中,所有请求都在该main方法中处理。有没有办法可以将不同的请求处理程序分成不同的类,就像Servlet的方式一样,以便代码结构看起来更好。

4

2 回答 2

3

首先,正如@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 注释资源类的方法。

于 2015-12-14T15:04:05.057 回答
2

是的,当然,如果你愿意,你可以完全面向对象。这是一个示例类供您构建。

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) -> {
            // ...
        }
    }
}
于 2015-11-21T00:33:44.173 回答