【问题标题】:@ControllerAvice Exception Handler does not work Internal Server Error@ControllerAvice 异常处理程序不起作用内部服务器错误
【发布时间】:2019-08-09 10:58:43
【问题描述】:

我正在实现一个全局异常处理程序 Spring Boot @ControllerAdivce 在 Kotlin 中Gradle

class SensorTypeNotFoundException(message: String) : RuntimeException(message)

如果我抛出 SensorTypeNotFoundException,我有 500 内部服务器错误

我不明白为什么 Spring Boot 看不到我的 ExceptionController。

有人可以帮忙吗?

这是我的 CustomExceptionController:

@ControllerAdvice
@RestController
class CustomExceptionController {

    private val logger = LoggerFactory.getLogger(javaClass.name)

    enum class ErrorKeys {
        ***
    }

    @ExceptionHandler(Exception::class)
    fun handleException(exception: Exception): ResponseEntity<ExceptionResponse> {
        ***
    }

    private fun createExceptionResponseEntity(exception: Exception): ResponseEntity<ExceptionResponse> {
        ***
        }
    }

    private fun buildResponse(message: String?, errorKey: ErrorKeys, httpStatus: HttpStatus): ResponseEntity<ExceptionResponse> {
        ***
        )

        return ResponseEntity(responseEntity, responseEntity.status)
    }
}

build.gradle.kts:


...
plugins {
    id("org.springframework.boot") version "2.1.6.RELEASE"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    kotlin("jvm") version "1.2.71"
    kotlin("plugin.spring") version "1.2.71"
}
...
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test")
}
...

【问题讨论】:

    标签: spring spring-boot kotlin controller


    【解决方案1】:

    创建一个单独的用@RestControllerAdvice注解的类,把你的@ExceptionHandler注解方法放在那里,并用ResponseEntityExceptionHandler扩展上述类。您还可以指定@RestControllerAdvicebasePackages 属性,将处理程序的执行限制在某些控制器上。

    【讨论】:

    • 还是同样的错误。你说的我已经做了但是现在我有一个空类`class CustomExceptionController: ResponseEntityExceptionHandler()`那个类的目的是什么?
    【解决方案2】:

    您可以提供响应状态特定的异常处理程序。

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler
    public ResponseEntity<Object> handleInternalServerError(Exception e) { 
    
      //Handler Snippet
    
    }
    

    希望这对你有帮助..!!

    【讨论】:

    • 感谢您的评论。问题是,根本没有调用 ExceptionHandler 方法。但是,如果我提供响应状态特定的异常 Class,那么它可以工作。但是“CustomExceptionController”类没有任何用途。
    【解决方案3】:

    感谢您的帮助,我已经解决了问题

    问题是,在我的控制器类中,返回值是&lt;List&lt;Any&gt;&gt;,但它应该是ResponseEntity&lt;List&lt;Any&gt;&gt;

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多