接口要求返回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
相关产品推荐
相关产品推荐

