一个项目:统一返回值,控制层统一异常处理与项目添加

来源:互联网 发布:于右任书法 知乎 编辑:程序博客网 时间:2024/06/05 12:50

重构方法的返回值,对返回值进行统一封装

实际项目中现在通常会对控制层返回的数据进行统一封装.
1)正常数据(包含页面要呈现的数据)
2)错误数据(包含一些异常信息)
在我们的项目我们会将控制台返回的数据封装为一个
JsonResult对象(此对象会转换为json格式字符串返回到客户端)

class JsonResult{
private int state;
private String message;
private Object data;
………
}

class Result{
………….
}
class R{
……..
}
- 这样封装后,控制层返回值统一

 @RequestMapping("doSaveObject")      @ResponseBody      public JsonResult doSaveObject(Project entity){         projectService.saveObject(entity);         return new JsonResult("insert ok");      }

js端解析为此返回对象

控制层异常的统一处理?

1)处理目的:提高系统的容错能力,改善用户体验.
2)处理手段:基于注解方式实现
 a)通过继承将异常处理代码写到BaseController类中
 b)通过@ControllerAdvice注解声明统一异常处理对象.

方案1:

public class BaseController{  @ExceptionHandler(ServiceException.class)  @ResponseBody  public JsonResult handleServiceException(         ServiceException e){       e.printStackTrace();       return new JsonResult(e);//state=0,message=e.getMessage();   }}class ProjectController extends BaseController{....}

方案2:

@ControllerAdvicepublic class ControllerHandlerException{  @ExceptionHandler(ServiceException.class)  @ResponseBody  public JsonResult handleServiceException(         ServiceException e){       e.printStackTrace();       return new JsonResult(e);//state=0,message=e.getMessage();   }}

Spring MVC 在发现控制层异常以后会自动检测查找异常处理方法

项目管理添加模块实现

1)在ProjectDao中添加方法

    int insertObject(Project entity);

2)在ProjectMapper.xml文件添加insert元素

   <insert id="insertObject"         parameterType="cn.tedu.ttms.product.entity.Project">           insert .......   </insert>

3)在ProjectService接口及实现类中添加相关方法

   void saveObject(Project entity);    @Override    public void saveObject(Project entity) {        if(entity==null)        throw new ServiceException("保存对象不能为空");        int rows=projectDao.insertObject(entity);        if(rows<=0)        throw new ServiceException("insert error");    }

4)在TestProjectService类进行单元测试.

5)在ProjectController类中添加方法

/**返回项目编辑页面*/      @RequestMapping("editUI")      public String eidtUI(){          return "product/project_edit";      }      /**       * name="东欧游"&code="..."&beginDate="..."       * spring 获得参数数据以后会对数据进行解析然后       * 调用project对象的setXXX方法将数据存储到project       * 对象.       */      @RequestMapping("doSaveObject")      @ResponseBody      public JsonResult doSaveObject(Project entity){         projectService.saveObject(entity);         return new JsonResult("insert ok");      }

6)在project_list.js中的添加按钮注册事件

$("#queryFormId").on("click",".btn-add",doLoadEditPage);function doLoadEditPage(){   //定义访问编辑页面的url地址   var url="project/editUI.do";   //$(".content").load(url)   var title;   //var cls=$(this).attr("class");//btn btn-primary btn-add   //if(cls=="btn btn-primary btn-add");   if($(this).hasClass("btn-add")){       title="添加项目信息"   }   if($(this).hasClass("btn-update")){        title="修改项目信息"   }   //在模态框中异步加载显示编辑页面.   //本项目中模态框的定义在index.jsp中,而且默认是隐藏的.   $("#modal-dialog .modal-body")   .load(url,function(){//callback method        $(".modal-title").html(title);        //页面加载完成显示模态框(其中show表示显示,hide表示隐藏)        $("#modal-dialog").modal("show");   });};

7)在project_edit.js中注册保存事件,执行保存业务

$(document).ready(function(){   $("#modal-dialog")   //模态框的.ok按钮上注册点击事件   .on("click",".ok",doSaveOrUpdate);   //在模态框隐藏后移除ok上注册的事件,防止数据多次提交.   $("#modal-dialog")   .on("hidden.bs.modal",function(){       console.log("==hidden.bs.modal==");       $("#modal-dialog").off("click",".ok");   });})    /*添加或修改数据*/    function doSaveOrUpdate(){    //0.验证表单数据是否为空    if(!$("#editFormId").valid())return;  //这个验证需要借助validate插件    //1.获得表单数据    var params=getEditFormData();    console.log(params);    //2.异步提交表单数据    var url="project/doSaveObject.do"    $.post(url,params,function(result){    if(result.state==1){    //隐藏模态框    $("#modal-dialog").modal("hide");    //显示相关信息    alert(result.message);    //重新查询数据    doGetObjects();    }else{    alert(result.message);    }});}    /*获取表单数据*/    function getEditFormData(){    var params={    name:$("#nameId").val(),    code:$("#codeId").val(),    beginDate:$("#beginDateId").val(),    endDate:$("#endDateId").val(),    valid:$("input[type='radio']:checked").val(),    note:$("#noteId").val()    }//JSON 对象    return params;}