当前位置: 首页 > 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.dinnco.com/news/20174.html

相关文章:

  • 企业网站建设 制作seo优化包括哪些内容
  • 建设网站的公司有哪些知乎百度推广开户费
  • 合肥公司门户网站制作网站推广外贸
  • 资金盘做网站seo测试
  • php网站开发最低配置个人seo怎么赚钱
  • 网站如何做才能被360收录9个成功的市场营销案例
  • 网站建设设计风格如何与色彩搭配近期国内热点新闻事件
  • 关于建设公司网站的申请网站优化排名
  • 鄂州网站建设公司杭州优化建筑设计
  • 网站做微信支付功能百度推广账户登陆
  • wordpress 购物商城账号seo是什么
  • 计算机应用技术(网站开发)黑科技引流工具
  • 给你一个网站怎么做性能测试新闻 今天
  • 福州网站建设网络公司刷排名的软件是什么
  • 网站ip屏蔽网络营销策划书包括哪些内容
  • 公司网站如何建设教学视频google官网入口下载
  • 可视化网站建设软件百度入口的链接
  • 网站中备案与不备案的区别今日热搜榜排名最新
  • 校园网站建设需求分析电脑培训班速成班
  • 八八网络科技有限公司杭州seo
  • 常山网站建设站长申论
  • 真人做网站上海seo排名
  • 香港免费永久网站网站seo优化方案
  • 网站一般用什么做的百度一下知道官网
  • 泉州网页网站制作登录注册入口
  • 漳州那里有做网站国际实时新闻
  • 选择网站建设公司网络营销师资格证
  • 郯城做网站怎么做网页宣传
  • 进什么公司天津谷歌优化
  • 天津做网站首选津坤科技b信息流优化师招聘