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
相关产品推荐
相关产品推荐

