zoukankan      html  css  js  c++  java
  • 通用回调接口应用

    Controller类:
    /** * CallbackController: * 回调接口*/ @RestController @RequestMapping(value = "callback") @Api(value = "回调接口", tags = "回调接口") public class CallbackController { private final String MODULE = "回调接口"; private static final Logger logger = LoggerFactory.getLogger(CallbackController.class); @Resource private CallbackStrategy callbackStrategy; /** * 回调接口接收数据 * @param callbackData * @param request * @param response * @return * @throws Exception */ @ApiOperation(value = "回调接口接收数据", notes = "回调接口接收数据") @ApiParam(type = "CallbackData", name = "callbackData", value = "接收数据", required = true) @PostMapping(value = "/pushData") public ResponseEntity<HttpResult> addSubmit( @RequestBody CallbackData callbackData, HttpServletRequest request, HttpServletResponse response) throws Exception{ return new ResponseEntity<>(callbackStrategy.getResource(new HttpResult(request.getRequestURI()),callbackData), HttpStatus.OK); } }

    实体类:
    public class CallbackData {
        /**
         * 回调类型
         */
        private String type;
        /**
         * 回调数据
         */
        private String data;
    
    
        public CallbackData(String type, String data) {
            this.type = type;
            this.data = data;
        }
    
        public CallbackData() {}
    
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public String getData() {
            return data;
        }
    
        public void setData(String data) {
            this.data = data;
        }
    }
    CallbackStrategy类:
    * 通过Spring将实现Strategy的实现类都自动注入到strategyMap类中
    * 当用户传入选择的资源池时,自动根据 type 去对应的资源池实现中查找资源。
    * 所以传参里面必须要有一个type类型(此处的类型应该为monitorAnchorStatus),传参请看上篇内容
    @Service
    public class CallbackStrategy {
    
        @Resource
        private final Map<String, StrategyService> strategyMap = new ConcurrentHashMap<>();
    
        public CallbackStrategy(Map<String, StrategyService> strategyMap) {
            strategyMap.forEach(this.strategyMap::put);
        }
    
        public HttpResult getResource(HttpResult result, CallbackData callbackData){
            if (!strategyMap.containsKey(callbackData.getType())) {
                throw new CheckException("回调类型未找到,无法处理推送数据.");
            }
            return strategyMap.get(callbackData.getType()).handle(result,new String(Base64.getDecoder().decode(callbackData.getData()), StandardCharsets.UTF_8));
    
        }
    }
    StrategyService类:
    public interface StrategyService {
    
        /**
         * 处理数据
         * @param result
         * @param data
         * @return
         */
        HttpResult handle(HttpResult result, String data);
    
    }

    对应的一个实现类:

    @Component("monitorAnchorStatus")
    public class MonitorAnchorStatusStrategyServiceImpl implements StrategyService {
    
        @Resource
        private MonitorAnchorService monitorAnchorService;
    
        @Resource
        private MonitorObjectService monitorObjectService;
    
        @Override
        public HttpResult handle(HttpResult result, String data) {
    //参数解析 MonitorAnchorStatusDO aDo
    = JSON.parseObject(data, MonitorAnchorStatusDO.class); TPmMonitorAnchorExample anchorExample=new TPmMonitorAnchorExample(); anchorExample.createCriteria().andAnchorArchivesCodeEqualTo(aDo.getAnchorArchivesCode()); anchorExample.setOrderByClause("anchor_archives_code asc limit 1"); List<TPmMonitorAnchor> anchorList=monitorAnchorService.selectByExample(anchorExample); if (null==anchorList || anchorList.isEmpty()){ throw new CheckException("xxxx"); } TPmMonitorAnchor anchor=anchorList.get(0); if(null!=aDo.getEarlyWarningLevelId()){ anchor.setEarlyWarningLevelId(aDo.getEarlyWarningLevelId()); } if(null!=aDo.getAnchorStatus()){ anchor.setAnchorStatus(aDo.getAnchorStatus()); } if(null!=aDo.getIsOffline()) { anchor.setIsOffline(aDo.getIsOffline()); } monitorAnchorService.updateByPrimaryKey(anchor); monitorObjectService.changeMonitorObjectMonitorSituation(anchor.getMonitorObjectId()); result.setMessage("xxx."); result.setStatus(HttpStatus.OK.value()); return result; } }
     
  • 相关阅读:
    Vi编辑器常用命令
    Notepad++常用命令——大大提升编码效率
    得到python某个模块的路径
    常用软件生命周期模型
    最常用的python实现
    Vi编辑器常用命令
    季羡林谈人生——意义和价值
    工业标准的品质也已成为开源世界中的范例之一
    《葵花宝典:WPF自学手册》三大网点书评集萃
    博文视点大讲堂37期 ——It's Android Time:程序员创富有道!
  • 原文地址:https://www.cnblogs.com/panbingqi/p/14074218.html
Copyright © 2011-2022 走看看