java - 在 Kotlin 中启用 CORS 时,Spark 在访问路线时返回空响应

标签 java kotlin spark-java

这是直接从 Spark documentation 获取的我的 CorsRoute:

class CorsRoute(origin: String, methods: String, headers: String) {
    init {
        options("/*") { request, response ->

            val accessControlRequestHeaders = request.headers("Access-Control-Request-Headers")
            if (accessControlRequestHeaders != null) {
                response.header("Access-Control-Allow-Headers", accessControlRequestHeaders)
            }

            val accessControlRequestMethod = request.headers("Access-Control-Request-Method")
            if (accessControlRequestMethod != null) {
                response.header("Access-Control-Allow-Methods", accessControlRequestMethod)
            }

            "OK"
        }

        before { request, response ->
            response.header("Access-Control-Allow-Origin", origin)
            response.header("Access-Control-Request-Method", methods)
            response.header("Access-Control-Allow-Headers", headers)
            response.type("application/json")
        }
    }
}

以下是我实例化 CorsRoute 的方法:

abstract class Route {
    init {
        CorsRoute("*","*","*")
    }
}

这是我如何开始我的路线:

class RestApiRoutes : Route() {
    fun init() {
        get("/test") {
            req, res -> {
                val obj = JsonObject().addProperty("foo", "bar")
                Gson().toJson(obj).toString()
            }
        }
    }
}

当我前往 http://127.0.0.1:4567/test 时,我收到:

() -> kotlin.String

为什么页面返回此响应而不是我预期的 JSON 响应?

最佳答案

因为

{
    req, res -> {
        val obj = JsonObject().addProperty("foo", "bar")
        Gson().toJson(obj).toString()
    }
}

是一个 lambda,它返回一个不带参数的 lambda,而不是一个 String。内部 lambda 的 toString 返回 () -> kotlin.String

删除内部 {} 以解决问题:

{ req, res ->
    val obj = JsonObject().addProperty("foo", "bar")
    Gson().toJson(obj).toString()
}

(有关格式约定,请参阅 https://kotlinlang.org/docs/reference/coding-conventions.html#lambda-formatting)

关于java - 在 Kotlin 中启用 CORS 时,Spark 在访问路线时返回空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55710897/

相关文章:

java - 有没有办法使用 Eclipse 找出表单的类?

java - 使用旧身份验证 token 将用户迁移到新应用程序 - InstallReferrer 自定义参数

mvvm - Kotlin 扩展函数数据绑定(bind)

java - 类路径资源 [public] 无法解析为 URL,因为它不存在 (SPARK)

java - 无法连接通过sparkjava创建的websocket url

java - 将 Webelement 类型转换为 Select 时出错

java - java中迭代hashmap列表

java - 实现 Java Comparator 的问题 - 泛型

kotlin - 在 Kotlin 中测试协程

java - 有什么方法可以在 Spark 上启用简单的 Web 服务器 HTTP 请求日志记录吗?