美文网首页
统一的分页BasePageController设计

统一的分页BasePageController设计

作者: 从入门到脱发 | 来源:发表于2018-11-09 15:51 被阅读0次

    多个业务模块中最常见的分页和info接口,分散在各个controller,个人想法可以利用IOC的beanFactory统一抽取公共的方案,使用接口来规范,多个业务不同实现.

    1.制定接口

    snipaste_20181109_154031.png

    2.多个实现

    snipaste_20181109_154341.png snipaste_20181109_154041.png snipaste_20181109_154103.png

    3.controller动态获取service实现

    实现的思路是不再自动注入bean的service,而且通过bean的id来获取实现,完成不同的业务,bean的id也可以两种不同的方式传入,以下是controller代码,可惜项目老大没有采用我的这种设计,service接口可以扩充query的bean来条件查询,这只是最基本的功能,接口是制定规范,很好的利用接口,一旦采用这种设计,后续增加新的模块,只需实现接口即可.

    @RestController
    @RequestMapping("/api")
    public class PageController implements BeanFactoryAware {
    
        private BeanFactory beanFactory;
    
        @GetMapping("/common/page")
        public Page getPage(Page page,String name) {
            Page pageInfo = new Page();
            
            //前端必传name
            /*
             * 不同的业务对应不同的name
             * 款式
             * 比如http://localhost:8080/api/common/page?name=style&pageNum=1&pageSize=5
             * 订单 
             * http://localhost:8080/api/common/page?name=order&pageNum=1&pageSize=5
             */
            PageService pageService = (PageService) beanFactory.getBean(name);
            pageInfo= pageService.getPage(page);
            return pageInfo;
        }
        
        
        @RequestMapping(value="/{name}/page",method = RequestMethod.GET)
        public Page getPageByUri(Page page,@PathVariable("name") String name) {
            Page pageInfo = new Page();
            
            //这种用法,前端不用传name,但是改变url,占位符根据业务不同,写不同的值,个人觉得这种方式更好
            /*
             * 
             * 款式
             * 比如http://localhost:8080/api/style/page?pageNum=1&pageSize=5
             * 订单 
             * http://localhost:8080/api/order/page?pageNum=1&pageSize=5
             */
            PageService pageService = (PageService) beanFactory.getBean(name);
            pageInfo= pageService.getPage(page);
            return pageInfo;
        }
        
        @GetMapping("/common/info")
        public Page getInfo(String name,Long id) {
            
            //前端必传name
            /*
             * 不同的业务对应不同的name
             * 款式
             * 比如http://localhost:8080/api/common/page?name=style&id=1
             * 订单 
             * http://localhost:8080/api/common/page?name=order&id=1
             */
            PageService pageService = (PageService) beanFactory.getBean(name);
            Page info = pageService.getInfo(id);
            return info;
        }
        
        
        @Override
        public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
            this.beanFactory = beanFactory;
    
        }
    
    }
    

    相关文章

      网友评论

          本文标题:统一的分页BasePageController设计

          本文链接:https://www.haomeiwen.com/subject/mfjoxqtx.html