• 通用回调接口应用


    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; } }
     
  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/panbingqi/p/14074218.html
Copyright © 2020-2023  润新知