【问题标题】:Javalin Migration from 3 to 4Javalin 从 3 迁移到 4
【发布时间】:2021-12-28 04:43:54
【问题描述】:

我们正在将当前 kotlin 项目中的 Javalin 从 3 迁移到 4。 dynamicGzip 已被弃用,取而代之的是压缩策略。 pom.xml 部分如下所示。

<properties>      
  <javalin.version>4.1.1</javalin.version>
  <jackson.version>2.13.0</jackson.version>
</properties>

kotlin部分代码如下

import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.*
import io.javalin.http.BadRequestResponse
import io.javalin.http.NotFoundResponse
import io.javalin.http.staticfiles.Location
import io.javalin.plugin.json.JavalinJackson
import io.javalin.core.compression.*

val app = Javalin.create { config ->
        config.defaultContentType = "application/json"
        config.enableWebjars()
        config.addStaticFiles("", Location.CLASSPATH)
        config.enableCorsForAllgOrigins()
        //it.dynamicGzip = true // deprecated method which was used in 3.12.0
        config.compressionStrategy(Gzip(6))
    }

我们正在使用此链接中的迁移文档 https://javalin.io/migration-guide-javalin-3-to-4

当我们尝试使用此更改在 intelij Idea 中构建项目时,以以下错误结束。

 D:\app\src\main\kotlin\app\app.kt:78:40
 Kotlin: Unresolved reference: Gzip

我们在这里缺少什么?

如果在 javalin 4 中也添加了 config.addStaticFiles 语法也会很有帮助

【问题讨论】:

  • 不是答案,只是观察,因为我使用的是 Java 而不是 Kotlin。这对我有用:import io.javalin.core.compression.*config.compressionStrategy(new Brotli(6), new Gzip(6));。换句话说,我需要 Brotli 和 Gzip。这是使用 Javalin 4.1.1。
  • 这也是我的静态文件设置:config.addStaticFiles("/public", Location.CLASSPATH);
  • 谢谢@andrewJames,它成功了,我得到的下一个错误是 Kotlin: Unresolved reference: enableCorsForAllgOrigins
  • @andrewJames 我已经用已经使用过的 javalin 类编辑了这个问题,enableCorsForAllgOrigins 还有另一个问题吗?
  • 这是一个错字:enableCorsForAllgOrigins 应该是 enableCorsForAllOrigins

标签: kotlin compression gzip javalin


【解决方案1】:

压缩

JavalinConfig 类的compressionStrategy 方法接受两个参数:

void compressionStrategy(Brotli brotli, Gzip gzip)

请参阅 JavaDoc here

相关类在Javalin中可以找到:

import io.javalin.core.compression.Brotli;
import io.javalin.core.compression.Gzip;

所以,你可以在你的设置中做这样的事情(我的例子是 Java 而不是 Kotlin):

// my Java example:
config.compressionStrategy(new Brotli(6), new Gzip(6));

静态文件

您可以使用这样的东西(同样,Java 示例不是 Kotlin):

// my Java example:
config.addStaticFiles("/public", Location.CLASSPATH);

在这种情况下,因为我希望我的文件位于运行时类路径中,所以我还在我的应用程序的 resources 目录中创建了一个 public 目录。您的具体实现可能会有所不同。

如果您愿意,也可以使用Location.EXTERNAL 将文件放置在文件系统中的其他位置(应用程序之外)。


还要注意config.enableCorsForAllgOrigins() 中有一个小错字。应该是:

config.enableCorsForAllOrigins()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2017-02-08
    相关资源
    最近更新 更多