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

接口要求返回MyObject对象时,如何返回MyError类型的错误对象?

实现方案

你可以直接通过构造携带MyError响应的ApiException抛出即可,JAX-RS框架会优先使用异常内的Response作为最终HTTP返回结果,不受接口声明的返回值类型约束。

具体实现步骤

  • 业务校验不通过时,先实例化MyError对象,按规则填充错误码、错误描述等字段
  • 用Response构造器生成错误响应:指定对应的HTTP错误状态码(比如400参数错误、500服务端错误等),设置响应体为已填充的MyError实例,声明响应类型为application/json
  • 将构造好的Response传入ApiException构造器,直接抛出该异常即可

示例代码

@Override
public MyObject checkName(String name) throws ApiException {
    // 业务校验逻辑示例
    if (name == null || name.trim().isEmpty()) {
        // 构造swagger生成的MyError错误实例
        MyError error = new MyError();
        error.setErrCode("INVALID_PARAM");
        error.setErrMsg("请求名称不能为空");
        
        // 构造错误响应
        Response errorResp = Response.status(Response.Status.BAD_REQUEST)
                .entity(error)
                .type(MediaType.APPLICATION_JSON)
                .build();
        // 抛出带响应的ApiException
        throw new ApiException(errorResp);
    }

    // 正常逻辑返回MyObject实例
    MyObject res = new MyObject();
    // 填充正常返回字段
    return res;
}

原理解释

JAX-RS规范明确支持自定义异常携带Response对象,当接口抛出此类异常时,框架会直接使用异常内的Response作为返回结果,完全忽略方法原本声明的返回值类型,所以即使接口要求返回MyObject,前端也能收到符合结构要求的MyError错误响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:57:04