当前位置: 首页 > news >正文

北京建设工程招标公告网站郑州 网站建设 东区

北京建设工程招标公告网站,郑州 网站建设 东区,百度搜索引擎关键词,西安大雁塔音乐喷泉时间背景:项目中有些接口的入参需要用户id信息,最简单的做法在每个Controller方法调用的时候获取登录信息然后给入参设置用户id,但是这样就会有很多重复性的工作。另一个可行的也更好的方案可以使用HandlerMethodArgumentResolver来实现。 部分示…

背景:项目中有些接口的入参需要用户id信息,最简单的做法在每个Controller方法调用的时候获取登录信息然后给入参设置用户id,但是这样就会有很多重复性的工作。另一个可行的也更好的方案可以使用HandlerMethodArgumentResolver来实现。

部分示例代码如下:

1、需要用户id的入参基类
@Data
@ToString
public class WarehouseBaseReq implements Serializable {private String userId;
}
2、新增自定义的解析器处理接口入参设置用户id
@Slf4j
@Component
public class LycMethodArgumentResolver implements HandlerMethodArgumentResolver, InitializingBean {@Autowiredprivate RequestMappingHandlerAdapter adapter;private HandlerMethodArgumentResolver delegate;@Overridepublic void afterPropertiesSet() throws Exception {List<HandlerMethodArgumentResolver> argumentResolvers = adapter.getArgumentResolvers();List<HandlerMethodArgumentResolver> resolverList = new ArrayList<>(argumentResolvers);// 用自定义的resolver代理decorateResolvers(resolverList);adapter.setArgumentResolvers(resolverList);}@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {return delegate.supportsParameter(methodParameter);}@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {Object obj = delegate.resolveArgument(methodParameter,mavContainer,webRequest,binderFactory);// 判断只有当入参是指定类型才设置if (obj instanceof WarehouseBaseReq) {WarehouseBaseReq requestObj = (WarehouseBaseReq)obj;// 从ThreadLocal中获取登录用户信息UserDto userDto = UserThreadLocal.getUser();if (null != userDto) {// 给接口入参设置用户idrequestObj.setUserId(userDto.getId());}}return obj;}private void decorateResolvers(List<HandlerMethodArgumentResolver> resolverList){for (int i=0; i<resolverList.size();i++){HandlerMethodArgumentResolver resolver = resolverList.get(i);if (resolver instanceof RequestResponseBodyMethodProcessor){this.delegate = resolver;resolverList.set(i,this);break;}}}
}
3、模拟查询仓库的入参
@Data
@ToString(callSuper = true)
public class WarehouseDto extends WarehouseBaseReq {private Long warehouseId;private String warehouseName;private String warehouseCode;
}
4、模拟查询仓库的controller方法
@RestController
@RequestMapping("/web/warehouse")
public class WarehouseController {@Autowiredprivate WarehouseBizService warehouseBizService;@RequestMapping("/testById")public BizRsp<WarehouseDto> testQueryById(@RequestBody WarehouseDto warehouseDto) {log.info("testQueryById方法执行,warehouseDto:{}",warehouseDto);LearingAssert.notNull(warehouseDto.getUserId(),"用户id不能为空");return BizRspUtil.success(warehouseBizService.queryById(warehouseDto));}
}
5、postman中模拟调用接口,入参只需要传递其他参数,结构如下:

{
“warehouseId”:1
}

自此调用方无需传递用户id,controller的方法也无需写重复代码设置用户id即可实现统一添加接口入参参数的效果。
在spring中还有其他一些处理器,可在一些场景下帮助我们更好的实现一些功能。

参考博客:
[1] spring中的各种处理器
[2]方法参数解析器

http://www.yayakq.cn/news/485143/

相关文章:

  • 自适应网站开发文字大小如何处理网站备案服务内容
  • 河北邢台官方网站企业网站的基本内容有哪些
  • 杭州手机网站制作济南网站建设百家号
  • 湛江网站建设招聘深圳精品网站制作
  • 楼盘建设信息网站wordpress不同尺寸图片大小
  • 服装电子商务网站建设3000字wordpress数据库迁移
  • 免费网站的软件网站新增一个域名备案
  • 高端营销型网站美食网站模板下载
  • 低价自适应网站建设artisteer 做的网站
  • 供需平台类网站建设wordpress 数据库表
  • 建设营销型网站公司珠海蓝迪装饰设计工程有限公司
  • 太原 招聘 网站建设 技术经理具有价值的常州做网站
  • 素材下载网站开发文档可以自己做课程的网站
  • 郏县网站制作哪家公司好怎么找网站做宣传
  • 成都网站登记备案查询有没有免费的资源可以在线观看
  • vs2013如何做网站哪家公司建换电站
  • 建设网站 注册与登陆邯郸网站建设恋家
  • 舞蹈网站建设报价怎么做电玩网站
  • 东台建网站物流公司网站怎么做
  • 做动效很好的网站wordpress 后台空白
  • 做播放器电影网站需要多少钱6物流公司图片
  • 遵义营销型网站建设百度搜索推广收费标准
  • 衡阳网站门户网站系统开发建设
  • 河南高端网站建设人武部正规化建设的意义
  • 网站建设数据库软件系统设计流程
  • 做网站优化有什么好处山东住房和城乡建设局网站
  • 北京网站改版价格wordpress4.7安装
  • 网站开发需要哪些能力asp网站图片
  • 网站开发教程视频百度云资源哪个网站做美食视频软件
  • 湖南网站建设制作windows优化大师的作用