请描述在构建AI大模型评测平台时,如何设计和实现统一的响应封装以及全局异常处理机制?
考察说明
考察候选人在实际项目中对于API响应规范化和错误处理架构的设计能力。
回答思路
- 【回答框架 1】统一响应封装:通常会定义一个通用的响应体结构,例如包含code(状态码)、message(提示信息)、data(业务数据)和traceId(链路追踪ID)等字段。后端通过一个自定义的Response类或Result类,配合泛型和静态工厂方法(如success()和error())封装所有接口返回值。在Controller层,所有方法都返回该统一类型,确保响应格式的一致性。
- 【回答框架 2】全局异常处理:基于Spring Boot的@RestControllerAdvice和@ExceptionHandler注解,可以集中处理系统抛出的异常。先定义基础异常类(如BizException)携带业务错误码,再针对参数校验异常(MethodArgumentNotValidException)、自定义业务异常和兜底Exception分别编写处理方法。每个方法根据异常类型返回对应错误码和提示信息,并记录日志,避免堆栈信息直接暴露给客户端。
- 【回答框架 3】业务异常与系统异常分离:对于已知业务失败(如模型评测任务不存在、参数不合法)使用BizException并返回可预期的错误码;对于未知系统异常(如数据库连接失败)则统一返回通用系统错误码,同时将详细异常堆栈记录到日志系统,便于研发排查。
- 【回答框架 4】兼容与扩展考虑:对于大模型评测平台,可能涉及异步任务或流式响应,需要额外考虑非标准响应场景,例如文件下载或SSE流。这类接口可选择性不走统一封装,但需在文档和拦截器中明确说明,避免与标准API混淆。同时,响应封装中可加入耗时和版本信息,方便调用方排查问题。
- 【关键点 1】统一响应封装的核心是定义包含code、message和data的通用结构,并通过泛型保证数据类型安全。
- 【关键点 2】全局异常处理通过@RestControllerAdvice集中管理,可以结合自定义业务异常类实现错误码与提示信息的统一。
- 【关键点 3】需要区分业务异常和系统异常,业务异常返回可预期错误码,系统异常记录日志并返回通用错误。
- 【关键点 4】注意异步和流式接口的特殊处理,避免强制统一封装造成不兼容。
- 【易错点 1】异常处理中直接返回堆栈信息或e.getMessage()会导致敏感信息泄露。
- 【易错点 2】对异常覆盖不全,导致未处理异常返回Spring默认错误页或非标准格式。
- 【易错点 3】统一响应封装中未考虑HTTP状态码与业务码的区分,导致客户端依赖单一状态码时产生歧义。