一、统一异常处理
1.统一异常结果类型
ResultInfo.java
/* * 系统提示信息封装类 */ public class ResultInfo{ public static final int TYPE_FAIL = 0;// 失败 public static final int TYPE_SUCCESS = 1;// 成功 public static final int TYPE_WARN = 2;// 警告 public static final int TYPE_INFO = 3;// 提示信息 /* * 消息提示类型 */ private int type; /* * 提示代码 */ private int messageCode; /* * 提示信息 */ private String message; /* * 提示信息明细列表 */ private List<ResultInfo> details; /* * 提示消息对应操作的序号,方便用户查找问题,通常用于在批量提示信息中标识记录序号 */ private int index; /* * 提交后得到到业务数据信息从而返回给页面 */ private Map<String,Object> sysdata = new HashMap<String,Object>(); public ResultInfo(){ } /* * 构造函数,根据提交信息代码messageCode获取提示信息 */ public ResultInfo(final int type,int messageCode,String message){ this.type = type; this.messageCode = messageCode; this.message = message; } public boolean isSuccess(){ if(this.type == TYPE_SUCCESS){ return true; } return false; } //get、Set... }
ExceptionResultInfo.java
/* * 自定义系统异常类 */ public class ExceptionResultInfo extends Exception { // 系统统一使用的结果类,包括了 提示信息类型和信息内容 private ResultInfo resultInfo; public ExceptionResultInfo(ResultInfo resultInfo) { super(resultInfo.getMessage()); this.resultInfo = resultInfo; } public ResultInfo getResultInfo() { return resultInfo; } public void setResultInfo(ResultInfo resultInfo) { this.resultInfo = resultInfo; } }
SubmitResultInfo.java
/* * 系统提交结果结果类型 */ public class SubmitResultInfo{ // 操作结果信息 private ResultInfo resultInfo; public SubmitResultInfo(ResultInfo resultInfo){ this.resultInfo = resultInfo; } public ResultInfo getResultInfo(){ return resultInfo; } public void setResultInfo(ResultInfo resultInfo){ this.resultInfo = resultInfo; } }
Service重写,抛出自定义的异常处理。
@Override public void insertSysuser(SysuserCustom sysuser) throws Exception{ Sysuser user = findSysuserByUserId(sysuser.getUserid()); if(user != null){ ResultInfo resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_FAIL); resultInfo.setMessage("账号已经存在了"); throw new ExceptionResultInfo(resultInfo); } String groupid = sysuser.getGroupid(); String mc = sysuser.getSysmc(); String mcID = null; if(groupid.equals("1") || groupid.equals("2")){ // 监督单位 Userjd userjd = findUserjdByMc(mc); if(userjd == null){ // 抛出异常 ResultInfo resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_FAIL); resultInfo.setMessage("用户单位不存在"); throw new ExceptionResultInfo(resultInfo); } mcID = userjd.getId(); }else if(groupid.equals("3")){ // 监督单位 Useryy useryy = findUseryyByMc(mc); if(useryy == null){ // 抛出异常 ResultInfo resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_FAIL); resultInfo.setMessage("用户单位不存在"); throw new ExceptionResultInfo(resultInfo); } mcID = useryy.getId(); }else if(groupid.equals("4")){ // 监督单位 Usergys usergys = findUsergysByMc(mc); if(usergys == null){ // 抛出异常 ResultInfo resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_FAIL); resultInfo.setMessage("用户单位不存在"); throw new ExceptionResultInfo(resultInfo); } mcID = usergys.getId(); } // 设置主键 UUID uuid = UUID.randomUUID(); String uuid32 = uuid.toString().replace("-", ""); sysuser.setId(uuid32); sysuser.setSysid(mcID); sysuserMapoer.insert(sysuser); }
Action重写
//提交用户 @RequestMapping("/addsysusersubmit") @ResponseBody public SubmitResultInfo insertSysuser(SysuserQueryVo vo){ //默认是成功的 ResultInfo resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_SUCCESS); resultInfo.setMessage("操作成功"); try{ sysuserService.insertSysuser(vo.getSysuserCustom()); }catch(Exception e){ //初始异常信息 e.printStackTrace(); //对异常信息进行解析 if(e instanceof ExceptionResultInfo){ //抛出的系统自定义异常 resultInfo = ((ExceptionResultInfo)e).getResultInfo(); } else{ //构造"未知错误异常" resultInfo = new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_FAIL); resultInfo.setMessage("未知错误"); } } SubmitResultInfo submitResultInfo = new SubmitResultInfo(resultInfo); return submitResultInfo; }
前端页面返回处理json返回数据统一包装。
function sysusersave(){ //准备使用jquery提供的ajax Form提交方式 //将form的id传入,方法自动将form中的数据组成成key/value数据,通过ajax提交,提交方法类型为form中定义的method, //使用ajax form提交时,不用指定url,url就是form中定义的action //此种方式和原始的post方式差不多,只不过使用了ajax方式 //第一个参数:form的id。 //第二个参数:sysusersave_callback是回调函数。 //第三个参数:传入的参数, 可以为空 //第四个参数:dataType预期服务器返回的数据类型,这里action返回json。 //根据form的id找到该form的action地址 jquerySubByFId(‘userform‘,sysusersave_callback,null,"json"); } //统一封装方法,作用:提示信息 function message_alert(data){ //从返回的json数据中获取结果信息 var data_v = data.resultInfo; //提交结果类型 var type=data_v.type; //结果提示信息 var message=data_v.message; //alert(message); if(type==0){ //如果type等于0表示失败,调用 jquery easyui的信息提示组件 $.messager.alert(‘提示信息‘,message,‘error‘); }else if(type==1){ $.messager.alert(‘提示信息‘,message,‘success‘); }else if(type==2){ $.messager.alert(‘提示信息‘,message,‘warning‘); }else if(type==3){ $.messager.alert(‘提示信息‘,message,‘info‘); } } //ajax调用的回调函数,ajax请求完成调用此函数,传入的参数是action返回的结果 function sysusersave_callback(data){ message_alert(data) }
测试
(1)成功时返回
(2)失败时返回
时间: 2024-10-10 10:33:54