#java #kotlin #spark-java
#java #kotlin #spark-java
Вопрос:
Вот мой CorsRoute, взятый непосредственно из документации Spark:
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.Строка
Почему страница возвращает это, а не мой ожидаемый ответ JSON?
Ответ №1:
Потому что
{
req, res -> {
val obj = JsonObject().addProperty("foo", "bar")
Gson().toJson(obj).toString()
}
}
это лямбда-выражение, которое возвращает лямбда-выражение без аргументов, а не a String
. И это 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 для соглашений о форматировании)
Комментарии:
1. Понял это, но забыл дать ответ, вот что я сделал — спасибо за ответ! Помечено принято для будущих зрителей!