Vertx已经写过“回复”

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

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) } 

这是它似乎有问题的代码。

 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()) } 

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

编辑:addUser方法添加

 fun addUser(context: RoutingContext) { val request = context.bodyAsJson val newUser = NewUserRequestDTO(request.getString("userID").trim(), request.getString("password").trim()) newUser.userID.trim() if (!newUser.userID.isNullOrEmpty() && !newUser.password.isNullOrEmpty()) { //check user ID if (userDAO.userIdInUse(newUser.userID)) { Response.sendResponse(400, Response.ResponseMessage.ID_IN_USE.message, context) return } //check password valid val isValid: Boolean = SecurityUtils.checkPasswordCompliance(newUser.password) if (!isValid) { Response.sendResponse(400, Response.ResponseMessage.PASSWORD_IS_NOT_VALID.message, context) return } val saltedPass = SecurityUtils.genSaltedPasswordAndSalt(newUser.password) userDAO.addUser(newUser.userID, saltedPass.salt.toString(), saltedPass.pwdDigest.toString()) } else { Response.sendResponse(401, Response.ResponseMessage.NO_USERNAME_OR_PASSWORD.message, context) return } Response.sendResponse(200, Response.ResponseMessage.USER_CREATED_SUCCESSFULLY.message, context) }