当发生错误时,Cloudopt Next将会自动调用错误拦截器进行处理。默认的错误拦截器 DefaultErrorHandler 会拦截 404 和 500 错误并输出错误信息。

    如果您需要处理更多错误,可以模仿 DefaultErrorHandler 创建一个Handler,并在配置文件中修改相应的配置即可。

    1. class DefaultErrorHandler : ErrorHandler() {
    2. override fun handle(statusCode: Int, throwable: Throwable?) {
    3. if (abs(errorStatusCode) == 404) {
    4. response.putHeader(HttpHeaders.CONTENT_TYPE, "text/html;charset=utf-8")
    5. context.response().end(Welcomer.notFound())
    6. return
    7. }
    8. if (abs(errorStatusCode) == 500) {
    9. response.putHeader(HttpHeaders.CONTENT_TYPE, "text/html;charset=utf-8")
    10. context.response().end(Welcomer.systemError())
    11. return
    12. }
    13. val errorMessage = if ((throwable?.message ?: "").isNotBlank()) {
    14. throwable?.message ?: ""
    15. } else if (context.data().containsKey("errorMessage")) {
    16. context.data()["errorMessage"].toString()
    17. } else {
    18. "This is a bad http request, please check if the parameters match the requirements."
    19. }
    20. renderJson(creatResult(errorStatusCode.toString(), errorMessage))
    21. }
    22. private fun creatResult(error: String, errorMessage: String): HashMap<String, String> {
    23. val map = hashMapOf<String, String>()
    24. map["error"] = error
    25. map["errorMessage"] = errorMessage
    26. return map
    27. }
    28. private val errorStatusCode: Int
    29. get() {
    30. if (this.context.statusCode() > 0) {
    31. this.response.statusCode = this.context.statusCode()
    32. } else {
    33. this.response.statusCode = 500
    34. }
    35. return this.response.statusCode
    36. }
    37. }