"响应已经写好"与Vertx

时间:2017-01-07 09:26:48

标签: java kotlin vert.x

我是Vertx的新手,并尝试创建我的第一个HTTP Rest服务器。但是,我一直在遇到这个问题。这是我尝试发送回复时遇到的错误。

__init__

这就是我设置路线的方式。

Jan 07, 2017 3:54:36 AM io.vertx.ext.web.impl.RoutingContextImplBase
SEVERE: Unexpected exception in route
java.lang.IllegalStateException: Response has already been written
    at io.vertx.core.http.impl.HttpServerResponseImpl.checkWritten(HttpServerResponseImpl.java:559)
    at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:156)
    at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:54)
    at com.themolecule.utils.Response.sendResponse(Response.kt:25)
    at com.themolecule.api.UserAPI.addUser(UserAPI.kt:52)
    at TheMoleculeAPI$main$3.handle(TheMoleculeAPI.kt:50)
    at TheMoleculeAPI$main$3.handle(TheMoleculeAPI.kt:19)
    at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:215)
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78)
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:94)
    at io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorise(AuthHandlerImpl.java:86)
    at 

这是它似乎遇到问题的代码。

// setup verx
        val vertx = Vertx.vertx()
        val router = Router.router(vertx)

        val allowHeaders = HashSet<String>()
        allowHeaders.add("x-requested-with")
        allowHeaders.add("Access-Control-Allow-Origin")
        allowHeaders.add("origin")
        allowHeaders.add("Content-Type")
        allowHeaders.add("accept")
        val allowMethods = HashSet<HttpMethod>()
        allowMethods.add(HttpMethod.GET)
        allowMethods.add(HttpMethod.POST)
        allowMethods.add(HttpMethod.DELETE)
        allowMethods.add(HttpMethod.PATCH)

        router.route().handler(CorsHandler.create("*")
                .allowedHeaders(allowHeaders)
                .allowedMethods(allowMethods))

        router.route().handler(BodyHandler.create())

        val config = JsonObject().put("keyStore", JsonObject()
                .put("path", "keystore.jceks")
                .put("type", "jceks")
                .put("password", "password"))

        // protect the API, login outside of JWT
        router.route("/them/*").handler(JWTAuthHandler.create(jwt, "/them/login"))

        //login routes
        router.post("/them/login").handler { it -> loginAPI.login(it, jwt) }

        //user routes
        router.get("/them/user/getusers").handler { it -> userAPI.getUsers(it) }
        router.post("/them/user/addUser").handler { it -> userAPI.addUser(it) }

我是否对处理程序做错了什么?我尝试多次更改响应的方法,但似乎没有任何工作。这是用Kotlin写的。如果我需要添加更多上下文,只需说出这个词!

编辑:添加了addUser方法

fun sendResponse(responseCode: Int, responseMsg: String, context: RoutingContext) {
        val userResponse = JsonObject().put("response", responseMsg)
        context
                .response()
                .putHeader("content-type", "application/json")
                .setStatusCode(responseCode)
                .end(userResponse.encodePrettily())
    }

0 个答案:

没有答案