service业务返回封装bean支持分页

package com.ejavashop.core;

import java.io.Serializable;

/**
 * 服务接口返回对象。
 * <p>
 * <strong>服务接口基本规范</strong><br />
 * 1. 任何服务方法,都必须使用<code>ServiceResult</code>返回结果;<br />
 * 2. 客户端调用服务方法,得到<code>ServiceResult</code>对象;<br />
 * 3. {@link ServiceResult#getSuccess()}为true表示服务方法执行成功,通过{@link #getResult()}得到执行结果;<br />
 * 4. {@link ServiceResult#getSuccess()}为false表示服务方法执行失败,通过{@link #getMessage()}获取消息描述信息(错误信息)。<br />
 * 
 * <p>
 * <strong>分页查询规范</strong>:<br />
 * 1. 服务方法必须有一个分页信息参数{@link PagerInfo},客户端设置好分页信息并通过参数传递给服务端;<br />
 * 2. 服务端按照分页信息进行查询,将符合条件的总记录数设置到<code>PagerInfo</code>上,通过<code>ServiceResult</code>返回<code>PagerInfo</code>;<br />
 * 3. 客户端通过{@link #getPager()}获取<code>PagerInfo</code>,通过{@link PagerInfo#getRowsCount()}得到总记录数;
 * 
 * <p>
 * <strong>异常处理规范</strong><br />
 * 1. 任何服务方法,不允许抛出异常。服务方法需要返回错误信息时,参考<strong>消息代码{@link #getCode()}、消息描述{@link #getMessage()}使用规范</strong><br />
 *       1.1). 通过网络传递java异常本身是不可靠的事情,依赖于底层服务框架对异常堆栈进行序列化、反序列化以及传输处理,
 *    有些远程通讯框架会对异常进行二次封装处理;<br />
 *       1.2). 某些异常堆栈信息可能存在循环引用等情况,会导致堆栈序列化失败;<br /> 
 *       1.3). 服务端封装业务逻辑的实现,可能使用到各种第三方组件、库,处理过程中可能抛出各种自定义异常。而客户端
 *    则无需依赖这些第三方组件和库,这样对于某些异常,服务端序列化传递到客户端之后,客户端无法反序列化回来;<br />
 * 2. 客户端调用服务方法,必须使用try .. catch捕获异常;<br />
 *       SOA中服务方法调用涉及到网络通讯,虽然服务方法承诺不会抛出任何异常,但网络通讯传输过程可能会出现各种异常信息,甚至服务不可用等情况,
 *    客户端必须捕获异常并进行相应处理;
 * 
 * <p>
 * <strong>消息代码{@link #getCode()}、消息描述{@link #getMessage()}使用规范</strong><br />
 * 1. 绝大部分服务方法不需要使用消息代码。<br />
 *       如<strong>服务接口基本规范</strong>中所示,客户端通过<code>getSuccess()</code>确定服务方法是否执行成功,
 *    如果执行失败,通过<code>getMessage()</code>得到错误描述即可;<br />
 *       服务器端发生异常执行失败时,详细的错误描述、堆栈信息应当记录到数据库或者服务端的文件日志中,用于问题排查处理;
 *    然后通过<code>getMessage()</code>返回对用户友好的、业务型的描述信息,客户端开发者通过这个信息可以大致了解、定位问题所在,详细的排查处理则通过服务端日志完成。
 *    客户端可以选择直接或者根据场景稍加补充,在用户界面展示这个错误消息,向用户解释执行状况。<br />
 * 2. 某些服务方法可能逻辑比较复杂,需要进行一系列比较重要的处理步骤,可能在不同步骤发生各种异常时,客户端需要有针对性的采取不同的处理方式,这种情况下可以使用消息代码。<br />
 *       使用到消息代码的服务方法,必须在服务方法的JavaDoc中详细列出所有消息代码及解释。<br />
 *       对消息代码的编码不做进一步规范要求,各服务方法根据实际场景自行定义,但应该尽量采用英文字符,能比较准确的描述错误,
 *    看到消息代码时能够比较直观的理解所代表的错误类型。
 *
 * @Version: 1.0
 * @Author: 王朋
 * @Email: wpjava@163.com
 */
public class ServiceResult<T> implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 3765720967319047788L;

    private T                 result;
    private PagerInfo         pagerInfo;
    private boolean           success          = true;
    private String            message          = "";
    private String            code             = "";

    /**
     * 服务是否执行成功。
     * @return
     */
    public boolean getSuccess() {
        return success;
    }

    /**
     * 服务是否执行成功。
     * @param isSuccess
     */
    public void setSuccess(boolean isSuccess) {
        this.success = isSuccess;
    }

    /**
     * 设置服务执行结果。
     * @param result
     */
    public void setResult(T result) {
        this.result = result;
    }

    /**
     * 服务执行过程发生异常时设置错误信息。
     * 该方法会将【success-服务是否执行成功】设置为false。
     * @param code 返回给客户端的消息代码。
     * @param message 返回给客户端的消息描述。
     */
    public void setError(String code, String message) {
        this.code = code;
        this.message = message;
        this.success = false;
    }

    /**
     * 返回给客户端的消息代码。
     * @return
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取服务执行结果。
     * @return
     */
    public T getResult() {
        return result;
    }

    /**
     * 获取服务返回的描述消息。
     * @return
     */
    public String getMessage() {
        return message;
    }

    /**
     * 设置服务返回的描述消息。
     * @param value
     */
    public void setMessage(String value) {
        this.message = value;
    }

    /**
     * 获取分页信息。
     * <p>只有某些使用分页查询列表的方法才会返回分页信息,除此之外均返回null。具体参考各服务方法说明。
     * @return
     */
    public PagerInfo getPager() {
        return this.pagerInfo;
    }

    /**
     * 设置分页信息。
     * @param pager
     */
    public void setPager(PagerInfo pager) {
        this.pagerInfo = pager;
    }

    @Override
    public String toString() {
        return "[result=" + result + ", message=" + message + ", success=" + success + ", code="
               + code + "]";
    }

}


分页bean

package com.ejavashop.core;

import java.io.Serializable;

import com.ejavashop.core.exception.ArgumentException;

/**
 * 分页信息。    
 * <p>
 * Page index从1开始递增,第1页的page index为1,第2页的page index为2,以此类推第n页的page index为n。
 * @Filename: PagerInfo.java
 * @Version: 1.0
 * @Author: 王朋
 * @Email: wpjava@163.com
 */
public class PagerInfo implements Serializable {

    /**
     *Comment for <code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -365525245851552479L;

    public PagerInfo() {
    }

    /**
     * 创建分页信息对象。
     * @param pageSize 每页记录数。必须大于0。
     * @param pageIndex 第几页。Page index从1开始递增,第1页的page index为1,第2页的page index为2,以此类推第n页的page index为n。
     */
    public PagerInfo(int pageSize, int pageIndex) {
        if (pageIndex <= 0)
            throw new ArgumentException("分页信息错误,page index必须从1开始递增");
        if (pageSize <= 0)
            throw new ArgumentException("分页信息错误,page size必须大于0");
        this.pageIndex = pageIndex;
        this.pageSize = pageSize;
    }

    private int pageIndex = 1;

    /**
     * 获取第几页。
     * <p>
     * Page index从1开始递增,第1页的page index为1,第2页的page index为2,以此类推第n页的page index为n。
     * @return
     */
    public int getPageIndex() {
        return this.pageIndex;
    }

    /**
     * 取MySQL数据库 limit m,n 语句的开始索引值m。
     * @return
     */
    public int getStart() {
        return (this.pageIndex - 1) * this.pageSize;
    }

    private int pageSize = 20;

    /**
     * 获取每页记录数。
     * @return
     */
    public int getPageSize() {
        return this.pageSize;
    }

    /**
     * 设定每页记录数。
     * @return
     */
    public int setPageSize(int pageSize) {
        return this.pageSize = pageSize;
    }

    private int rowsCount = 0;

    /**
     * 获取符合条件的总记录数。
     * @return
     */
    public int getRowsCount() {
        return this.rowsCount;
    }

    public void setRowsCount(int rowsCount) {
        this.rowsCount = rowsCount;
    }

    @Override
    public String toString() {
        return "{ pageIndex:" + this.pageIndex + ", pageSize:" + this.pageSize + ", rowsCount:"
               + this.rowsCount + " }";
    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用域     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)     11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值