You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin抛出自定义异常触发500错误无法正常返回问题求解

问题原因及解决方法

核心原因

你当前的自定义异常继承了Exception(受检异常),Spring Boot默认没有对这类自定义受检异常配置处理规则,异常抛出后未被捕获就会触发默认的500错误响应。参考Java代码里的自定义异常是继承RuntimeException(非受检异常),本身不会被强制要求捕获,更适合业务异常场景。

解决步骤

1. 修改自定义异常的父类

将CustomExceptionName的父类从Exception改为RuntimeException:

class CustomExceptionName(message: String) : RuntimeException(message)

2. 新增全局异常处理器(可选,用来自定义返回格式)

如果需要自定义异常返回的报文结构、HTTP状态码,可新增全局异常处理类,统一捕获你定义的自定义异常:

import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.ExceptionHandler
import org.springframework.web.bind.annotation.RestControllerAdvice

@RestControllerAdvice
class GlobalExceptionHandler {
    // 仅捕获指定的自定义业务异常
    @ExceptionHandler(CustomExceptionName::class)
    fun handleCustomBusinessException(e: CustomExceptionName): ResponseEntity<Map<String, Any>> {
        // 可根据业务需求调整返回字段和状态码,示例用400错误而非默认500
        val resp = mapOf(
            "code" to 40001,
            "msg" to e.message
        )
        return ResponseEntity(resp, HttpStatus.BAD_REQUEST)
    }
}

调整完成后,原有Controller代码不需要修改,触发emailExist == true的逻辑时,会直接抛出你定义的自定义异常,按照你配置的规则返回响应,不会再触发默认500错误。

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:18:03