标签: spark-framework

Spark框架:匹配或不跟踪斜杠

我在Spark框架中注意到了一些东西.它与使用映射路由的尾部斜杠不匹配.所以它认为/ api/test和/ api/test /是不同的URI.

如果有一种方法可以将它们一起通配,那就好了,但似乎没有.我错过了什么吗?

我想要这条路线:

Spark.get("/api/test", (req, res) -> {
            return "TEST OK";
        });
Run Code Online (Sandbox Code Playgroud)

匹配/ api/test OR/api/test /.就目前而言,它只匹配/ api/test,如果我将其切换为:

Spark.get("/api/test/", (req, res) -> {
            return "TEST OK";
        });
Run Code Online (Sandbox Code Playgroud)

它只匹配 /api/test/

java routes spark-java spark-framework

11
推荐指数
2
解决办法
1547
查看次数

Java spark框架启用日志记录

我正在构建一个带有嵌入式Jetty和Handlebars模板引擎的Spark框架的Java应用程序.但是当我得到500内部错误时,控制台没有说什么.我已经在我的pom.xml中添加了依赖项:http://sparkjava.com/documentation.html#add-a-logger 但不会打印所有异常/错误(如错误500)

在这里我的pom.xml dependecies

<dependencies>

    <!-- FRAMEWORK:     Spark -->
    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.5</version>
    </dependency>

    <!-- TEMPLATES:     Handlebars -->
    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-template-handlebars</artifactId>
        <version>2.3</version>
    </dependency>

    <!-- DB-MAPPING:    sql2o -->
    <dependency>
        <groupId>org.sql2o</groupId>
        <artifactId>sql2o</artifactId>
        <version>1.5.4</version>
    </dependency>

    <!-- DRIVERS: sqlite-->
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.8.11.2</version>
    </dependency>

    <!-- LOGGER:        slf4j -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

</dependencies>
Run Code Online (Sandbox Code Playgroud)

我怎样才能启用所有火花记录?

java jetty embedded-jetty maven spark-framework

11
推荐指数
2
解决办法
7150
查看次数

Spark WS Framework Filter被调用两次

我想使用前置过滤器来添加尾部斜杠以及前置过滤器来处理某些端点上的身份验证.

这是我的路由代码:

// Add filter to all requests which adds a trailing slash if it is missing //
before("*", Filters.addTrailingSlashes);
path("/api", () -> {
    // Authentication Intercept //
    before("/*", AuthenticationIntercept.authenticationIntercept);

    // Sampling Endpoints //
    get(Path.Web.SAMPLES_FETCH_LATEST, SamplingController.fetchLatestSamples, new JsonTransformer());
    get(Path.Web.SAMPLES_FETCH_FOR_DEVICE, SamplingController.getLatestSamplesForDevice, new JsonTransformer());
});
Run Code Online (Sandbox Code Playgroud)

然后我点击以下端点:

本地主机:4567/API /样品/ 10

会发生什么是首先调用addTrailingSlashes.然后调用身份验证过滤器,然后再次调用addTrailingSlashes,localhost:4567/api/samples/10 /作为请求端点,最后再次调用身份验证过滤器.

这是预期的行为吗?我想要发生的是,addTrailingSlashes一旦添加斜杠就被调用,然后转发请求一次,以便只调用一次身份验证过滤器.

任何想法都将非常感激.

谢谢,内森

java rest spark-framework

6
推荐指数
1
解决办法
150
查看次数

如何在Spark框架中获取所有公开的路由

在Java Spark Web框架中,路线定义为

get("/", (request, response) -> {
// Show something
Run Code Online (Sandbox Code Playgroud)

});

在我的应用程序中,我定义了多个路由。有什么办法可以获取应用程序的所有公开路由?

java spark-framework

5
推荐指数
1
解决办法
517
查看次数

使用 Java 和 Vue 创建 Web 应用程序的更好方法

我开始更多地进入网络开发。目前,我将 Spark 框架与 Vue 一起用于我制作的少数应用程序。虽然这当然有效,但并不理想。

该项目是使用 Maven(以及用于 Vue 的 NPM)构建的,构建过程如下所示。

  1. Maven 打包 Spark Framework Java 应用程序
  2. Maven(带有frontend-maven-plugin)下载node/npm并构建Vue前端
  3. Maven将编译好的资源作为静态资源拷贝到jar中

所以文件系统看起来像这样

/src/main/java(Spark 框架)

/src/main/resources (Vue)

这会导致一些烦恼。

  1. 一切都在一个存储库中。理想情况下,我可以为项目的每一层都有一个单独的 repo(一个用于 Java,一个用于 Vue)
  2. 开发工作流程并不理想。如果我只是想测试app的Java部分,我还是花时间编译前端(Vue)
  3. 一个小问题,但在 IDE 中工作时,我正在处理深度嵌套的文件夹。任何时候我想编辑前端,我的文件夹结构看起来像 /src/main/resources/project-vue/

这是我使用此模型的项目之一

所以我的问题是:构建应用程序的更好方法什么?

java maven node.js vue.js spark-framework

5
推荐指数
1
解决办法
1890
查看次数

Gradle Jar将Vue包装到Spark中

我将Vue UI与Spark Java后端捆绑在一起。
这两个模块都是独立构建的,可以通过以下结构正常工作:

  project
  +-- backend
  |   +-- src
  |   |   +-- main
  |   |       +-- resources
  |   |           +-- public <= Where the jar is picking the static files
  |   +-- build
  |       +-- libs <= Gradle Jar output
  +-- ui
      +-- dist <= Vue build output
Run Code Online (Sandbox Code Playgroud)

在后端,Gradle捆绑backend/src/main/resources/public到Jar中/public。因此,我从复制ui/distbackend/src/main/resources/public作为jar任务依赖项。

  task copyUI(type: Copy) {
      from( '../ui/dist')
      into( 'src/main/resources/public')
  }

  jar.dependsOn( copyUI)
Run Code Online (Sandbox Code Playgroud)

Gradle正在复制文件,但是创建jar之后。
换句话说,我必须创建两次jar才能正确。

我如何指示Gradle在包装/ public前等待复制完成

我的build.gradle罐子部分看起来像这样 …

packaging gradle vue.js spark-framework

5
推荐指数
1
解决办法
413
查看次数

与 Spark 框架一起使用时,如何配置 Jetty 以允许更大的表单

如何通过Spark 框架配置 Jetty 选项?

当我提交一个大表格时,我遇到了下面的问题。Jetty 的解决方案记录在Form too Large Exception 中

但是 Jetty 使用 Spark Framework 对我隐藏,我将如何配置来解决这个问题。

    org.eclipse.jetty.http.BadMessageException: 400: Unable to parse form content
        at org.eclipse.jetty.server.Request.getParameters(Request.java:373)
        at org.eclipse.jetty.server.Request.getParameter(Request.java:1016)
        at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:194)
        at spark.Request.queryParams(Request.java:283)
        at spark.http.matching.RequestWrapper.queryParams(RequestWrapper.java:141)
        at com.jthink.songkong.server.callback.ServerEditSongs.startTask(ServerEditSongs.java:45)
        at com.jthink.songkong.server.CmdRemote.lambda$null$62(CmdRemote.java:171)
        at spark.RouteImpl$1.handle(RouteImpl.java:72)
        at spark.http.matching.Routes.execute(Routes.java:61)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1568)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
        at org.eclipse.jetty.server.Server.handle(Server.java:564)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
        at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
        at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
        at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:59
1)
        at …
Run Code Online (Sandbox Code Playgroud)

java jetty spark-framework

3
推荐指数
1
解决办法
2830
查看次数