🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 有时候,业务中,会需要根据业务需要,将数据返回给前端之前,进行一些基于业务逻辑的预处理; 举例来说,同一个商品,指定多个价格,根据当前登陆用户的不同,启用不同的价格,那么,可以借用这个插件机制,极大的简化业务设计和开发,只需要设计多个价格,但根据当前登陆用户,动态的获取具体某个价格设置到返回字段名,然后给前端,前端的编码就非常简单,无需加入业务判断逻辑了; ## 二、方案 ### **实现自己的定制业务类** 定义一个业务bean,实现CustomizeReturnResultAspectProcessor,这个bean,可以使用任何IOC中的资源,非常强大; 举例; ``` @Component public class SalePriceCustomizeReturnResultProcessor implements CustomizeReturnResultAspectProcessor { @Override public void businessLogic(RayModel model) throws Exception { String modelPropertyName = "listobject"; if (model.getCurLoginData() != null) { long identity = model.getCurLoginData().getCurIdentityId(); List newList = new ArrayList(); List list = (List) ByteCodeUtil.getBeanValue(model, modelPropertyName); if (list != null) { for (Object obj : list) { String fieldName = "skuSalePrice"; Long value = (Long) ByteCodeUtil.getBeanValue(obj, fieldName + identity); BeanUtil.setProperty(obj, fieldName, value); newList.add(obj); } BeanUtil.setProperty(model, modelPropertyName, newList); } } } } ``` ### **业务方法中使用** 用RayCustomizeReturnResultProcessor注解; ``` @RayServiceMethod @RayCustomizeReturnResultProcessor(processorClass = com.ray.sale.spi.SalePriceCustomizeReturnResultProcessor.class) public ResponseObject listsku(long spuId) throws Exception { model.setListobject(rmallGoodsSkuDao.findBySpuId(spuId)); return responseObj; } ```