记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析
API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析
背景
我有一个服务 A ,写了一个接口定义如下:
@RequestMapping({"/config/coupon"})
public interface CouponOperateTaskService {@PostMapping({"/list"})@ApiOperation("优惠券操作任务列表")BizPageResponse<CouponOperateListResponse> couponOperateList(@RequestBody @Validated CouponOperateRequest request);
}
打了一个 api 的jar 包发布到 maven 仓库,被 服务 B 引用:
@FeignClient(name = "ext-service-mkt-coupon-config", configuration = FeignSupportConfig.class)
public interface CouponOperateTaskClient extends CouponOperateTaskService {}
B 服务进行调用:
@Resourceprivate CouponOperateTaskClient operateTaskClient;@ApiOperation("优惠券操作任务列表")public BizPageResponse<CouponOperateListResponse> couponOperateTaskList(@RequestBody @Validated CouponOperateRequest request) {return operateTaskClient.couponOperateList(request);}
调用之后response就会返回异常信息:
{"code": 10025,"message": "系统异常,错误码:null","data": {"results": [],"total": 0,"pageCount": 0,"currentIndex": 0,"hasNext": false}
}
更诡异的是并且控制台和日志系统都搜不到错误日志。
分析
上面为背景,经过分析后,有两个问题需要解决:
- 为什么会报错?
- 为什么没有日志?
我们先看第二个问题,为什么没有错误日志。
据我所知,我们的项目中间件同一封装了全局的日常处理类,那为啥没有生效呢?找到封装好的 异常处理类:com.tuhu.springcloud.common.advice.ExceptionHandlerAdvice
@ConditionalOnClass(BizResponse.class)
@RestControllerAdvice
@Slf4j
public class ExceptionHandlerAdvice {/*** 参数异常处理** @param validException validException* @return BizBaseResponse*/@ExceptionHandler(value = { MethodArgumentNotValidException.class, BindException.class })@ResponseStatus(value = HttpStatus.OK)@ResponseBody@SuppressWarnings({ "rawtypes" })public BizResponse handleMethodArgumentNotValidException(Exception validException) {log.info("SC服务请求参数有误:{}", validException.getMessage(), validException);BindingResult bindingResult = null;if (validException instanceof MethodArgumentNotValidException) {bindingResult = ((MethodArgumentNotValidException) validException).getBindingResult();} else if (validException instanceof BindException) {bindingResult = ((BindException) validException).getBindingResult();}if (null == bindingResult || null == bindingResult.getFieldError()) {return new BizResponse<>(BizErrorCodeEnum.PARAM_ERROR);}return new BizResponse<>(BizErrorCodeEnum.PARAM_ERROR, bindingResult.getFieldError().getDefaultMessage());}}
发现 @ConditionalOnClass(BizResponse.class)
只针对 BizResponse.class 的响应封装有效,踩坑+1 !!!
那我们先改为 BizResponse 的响应试试呢?
@Resourceprivate CouponOperateTaskClient operateTaskClient;@ApiOperation("优惠券操作任务列表")public BizResponse<CouponOperateListResponse> couponOperateTaskList(@RequestBody @Validated CouponOperateRequest request) {BizPageResponse<CouponOperateListResponse> couponOperateListResponseBizPageResponse = operateTaskClient.couponOperateList(request);return BizResponse.success();}
这次我们把 Response 改为 BizResponse 封装的,那 com.tuhu.springcloud.common.advice.ExceptionHandlerAdvice
这个异常拦截应该能够拦截到了吧,试试看:
{"code": 10025,"message": "系统异常,错误码:null","data": null
}
结果,试试就逝世!
记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析相关推荐
- java若依框架开发api接口(添加新模块)
在java的spingboot框架中比较好的开源后台那必须是若依了!为了方便管理自己开发的api接口,添加自己的模块,将api接口统一管理在该模块中! 记得三连哦~ 1.下载若依admin,链接:Ru ...
- 萤石开放平台——怎么通过API接口远程添加摄像头?
高科技摄像头特别是海康萤石摄像头,已经不再只局限于简单的视频功能,特别是智能AI的普及,摄像头也华丽变身成了一个个独立的智能个体,可以实现人脸抓拍,人形检测,客流统计等店铺值守场景,也可以实现安全帽识 ...
- 我的编码习惯 —— API 接口定义
工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口.接口定义一定程度上能反应程序员的编程功底.列举一下工作中我发现大家容易出现的问题: 1. 返回格式不统一 同一个接口,有时候 ...
- 上传图片-服务端-Api接口定义
API接口 模型类 系统的文件信息(图片.文档等小文件的信息)在mongodb中存储,下边是文件信息的模型类. 1) 模型如下: package com.learn.framework.domain. ...
- 【Abp VNext】实战入门(七):【1】xxx.Web网站层 —— API接口服务添加跨域访问支持
一.前言 通过命令 abp new AoRuiDe.GasMonitoring 或者直接从官网下载的项目,默认没做跨域配置,会导致在前后端分离的网页中去访问后端接口的时候报错"Access- ...
- Controller规范和接口定义,添加一条新数据并返回此数据的ID(主键)
参考文章: 烂代码之:Controller规范和接口定义 添加一条新数据并返回此数据的ID(主键) 删除数据返回boolean 添加数据后返回Id <insert id="" ...
- Swagger3 API接口文档规范课程(Java1234)(内含教学视频+源代码)
Swagger3 API接口文档规范课程(Java1234)(内含教学视频+源代码) 教学视频+源代码下载链接地址:https://download.csdn.net/download/weixin_ ...
- 各种快递查询Api接口(快递鸟)
文章目录 #应用场景 #申请Key #快递查询Api接口 #前提 项目开发中,有些需求难免会用到关于快递的一些Api接口:本篇主要介绍的是快递的查询Api及与其他各家的不同之处: 常用的提供快递Api ...
- 快递鸟查询Api接口使用(PHP版)
前提 项目开发中,有些需求难免会用到关于快递的一些Api接口:本篇主要介绍的是快递的查询Api及与其他各家的不同之处: 常用的提供快递Api接口的有: 快递鸟 快递100 爱查快递 等等 如大家使用 ...
最新文章
- 【机器学习基础】如何在Python中处理不平衡数据
- Python用@property使类方法像属性一样访问
- [Java基础]String对象的特点(易错点)
- 学会用taro封装一个组件
- 设置TextField内文字距左边框的距离
- meta 标签的作用
- 小米浏览器禁用java_小米手机调试总出现“INSTALL_CANCELED_BY_USER”
- 【电脑使用】插入SD卡图标是灰色的,点击显示“请将磁盘插入驱动器”
- studio和solo哪个好_beats studio3 和solo3的区别再哪里?
- Ubuntu下载软件包网速过慢的解决方法
- Twaver-HTML5基础学习(33)自动布局
- 编程序找出1000之内的所有完数,并输出其因子
- python在大数据分析中的应用
- 大数据学习总结(2021版)---Mysql基础
- Excel表格生成sql数据
- 机器学习深度学习加强学习_我如何在9个月内学习深度学习
- 青春无言│用技术定格毕业季最美好的回忆
- 【GridMask】《GridMask Data Augmentation》
- 关于qt.qpa.plugin: Could not load the Qt platform plugin “xcb“的问题
- 组成计算机系统的是__,一个完整的计算机系统的组成部分的确切提法应该是______...