数据请求设计

  •  先上图

  •   基于Restful模式,目前单次数据请求考虑解决两个问题
    • 用户验证
    • 分页处理
  • 用户权限认证由TokenInterceptor拦截,用户登陆后后台返回一串密钥,这个密钥由JavaJsonWebToken生成,密钥由生成时间、用户名、权限等组成。客户发送请求必须携带密钥,通过密钥过滤接口的访问权限
  • 系统使用Mybatis作为持久层框架,之前分页参数都是int start,int end,String order,String sort。比较原始且不方便,所以考虑在此基础封装一层方便使用。在设计时希望Controller可以直接接受到分页对象、并且根据实际数据库的不同给予不同的封装。(这个还没完成)
  • 因此在使用了装饰模式,定义了Pagination接口,抽象类AbastractPagination,与三个实现类OraclePagination,MySqlPagination,SqlServerPagination
  • 实现HanlderMethodArgumentResolver,重写supportsParamter、resolveArgument实现分页对象的传递
  • PaginationResolver
    /**
     * 分页参数解析器
     * @author shadow
     * @create 2017-12-14
     * {@link}
     */
    public class PaginationResolver implements HandlerMethodArgumentResolver {
    
    	/**
    	 * 分页接口的实现类 默认为Oracle分页
    	 */
    	private Class<? extends Pagination> paginationType = OraclePagination.class;
    
    	/**
    	 * 
    	 * 判断参数是否为 {@link Pagination}的实现类
    	 */
    	@Override
    	public boolean supportsParameter(MethodParameter parameter) {
    		return parameter.getParameterType() == Pagination.class;
    	}
    
    	/**
    	 * TODO 待优化 根据实际数据库类型自动映射
    	 * 根据数据库类型给予正确的分页参数
    	 */
    	@Override
    	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
    			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    		HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
    		Pagination page = (Pagination) ObjectUtils.setPoperties(paginationType, request, null);
    		page.init();
    		return page;
    	}
    
    	public Class<? extends Pagination> getPaginationType() {
    		return paginationType;
    	}
    
    	public void setPaginationType(Class<? extends Pagination> paginationType) {
    		this.paginationType = paginationType;
    	}
    }
    

 

转载于:https://my.oschina.net/shadowli/blog/1589981

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值