配色: 字号:
角色管理统一异常处理(1)
2018-01-13 | 阅:  转:  |  分享 
  
京淘

权限管理系统

Day18





1. 角色管理初步优化 1-1

1.1. 统一异常处理 1-1

1.1.1. 定义业务层异常类 1-2

1.1.2. 定义统一异常处理类 1-2

1.2. 统一结果集封装 1-3

1.2.1. 定义JsonResult类 1-3

1.2.2. 应用JsonResult类 1-4

2. 用户管理需求设计 2-5

2.1. 功能设计 2-5

2.2. 表的设计 2-5

2.3. 实体设计 2-5

3. 用户管理原型设计 3-6

3.1. 用户列表页面 3-6

3.2. 用户添加页面 3-6

3.3. 用户修改页面 3-7

4. 用户管理查询模块服务端实现 4-7

4.1. 查询模块DAO实现 4-7

4.2. 查询模块Mapper元素实现 4-7

4.3. 查询模块Service接口方法定义及实现 4-8

4.4. 查询模块Controller方法的实现 4-9

5. 查询模块客户端页面实现 5-10

5.1. 定义客户端页面user_list.html 5-10

5.2. 客户端页面中JS代码实现. 5-10

5.3. 客户端页面start.html注册菜单事件 5-11

6. 总结 6-11

6.1. 重点和难点分析 6-11

6.2. 常见FAQ 6-12

角色管理初步优化

异常处理

提高系统容错机制的一种方式,并可以更好的改善用户体验.

我们业务数据异常通常要反馈给用户这种反馈可通过异常的传递进行实现.



项目统一异常处理基本步骤:

一个异常类,业务层异常

一个的异常处理handler),在此类中进行全局异常处理.



定义业务层异常



publicclassServiceExceptionextendsRuntimeException{

privatestaticfinallongserialVersionUID=-4181072079763562413L;

publicServiceException(){

super();

}

publicServiceException(Stringmessage,Throwablecause,

booleanenableSuppression,booleanwritableStackTrace){

super(message,cause,enableSuppression,writableStackTrace);

}

publicServiceException(Stringmessage,Throwablecause){

super(message,cause);

}

publicServiceException(Stringmessage){

super(message);

}

publicServiceException(Throwablecause){

super(cause);

}

}





定义统一异常处理类



@ControllerAdvice

publicclassControllerExceptionHandler{

@ExceptionHandler(ServiceException.class)

@ResponseBody

publicStringhandleServiceException(

ServiceExceptione){

e.printStackTrace();

returne.getMessage();

}

}结果集



在实际项目中,为了客户端更好的处理服务端数据,通常会在服务端数据进行

的状态,具体信息,数据等.



定义JsonResult类



publicclassJsonResult{//Result/R

/状态码(例如404是一个状态)

State=1,表示业务成功完成.

State=0,表示业务完成失败/

privateintstate=1;

/与状态码对应的具体消息(

例如404表示错误信息,是url对应的地址没找到)

/

privateStringmessage="OK";

/借助此属性封装服务端返回的具体数据,

例如查询的结果/

privateObjectdata;

publicJsonResult(){}

publicJsonResult(intstate,Stringmessage){

this.state=state;

this.message=message;

}

publicJsonResult(intstate,Stringmessage,Objectdata){

this.state=state;

this.message=message;

this.data=data;

}

/当在控制层将一个JsonResult对象

转换为JSON串时,会调用此对象对应的

get方法/

publicintgetState(){

returnstate;

}

publicStringgetMessage(){

returnmessage;

}

publicObjectgetData(){

returndata;

}

}





应用JsonResult类

RoleController中列表页面数据查询定义

@RequestMapping("doFindPageObjects")

@ResponseBody

publicJsonResultdoFindPageObjects(IntegerpageCurrent,Stringname){

PageObjectpageObject=

sysRoleService.

findPageObjects(pageCurrent,name);

returnnewJsonResult(1,"queryok",pageObject);//data

}



客户端JS实现页面数据部分JS:



functiondoGetObjects(){

varurl="role/doFindPageObjects.do";

varpageCurrent=$("#pageId").data("pageCurrent");

if(!pageCurrent)pageCurrent=1;

varparams={"pageCurrent":pageCurrent};

params.name=$("#searchNameId").val();

$.getJSON(url,params,function(result){//JsonResult

if(result.state==1){

//将服务端返回的数据添填充在表格中

setTableTBodyRows(result.data.records);

//设置分页信息

setPagination(result.data);

}else{

alert(result.message);

}

});

}









用户管理如下表创建在_sys数据库中CREATETABLE`sys_users`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`username`varchar(50)NOTNULL,

`password`varchar(100),

`salt`varchar(50),

`email`varchar(100),

`mobile`varchar(100),

`valid`tinyint(4),

`createdTime`datetime,

`modifiedTime`datetime,

`createdUser`varchar(20),

`modifiedUser`varchar(20),

PRIMARYKEY(`id`),

UNIQUEKEY`username`(`username`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;



实体设计

创建实体类对应我们的数据库表





publicclassSysUserimplementsSerializable{

privatestaticfinallongserialVersionUID=1768931144633277198L;

privateIntegerid;

privateStringusername;

privateStringpassword;

privateStringemail;

privateStringmobile;

privateStringsalt;//盐值

privateIntegervalid;

privateDatecreatedTime;

privateStringcreatedUser;

privateStringmodifiedUser;

privateDatemodifiedTime;

//set,get

}





用户管理原型设计

用户列表页面







用户添加页面







用户修改页面







用户管理查询模块服务端实现

查询模块DAO实现

定义SysUserDao接口,并在接口中添加如下两个方法,要考虑到分页。



ListfindPageObjects(

@Param("username")Stringusername,

@Param("startIndex")IntegerstartIndex,

@Param("pageSize")IntegerpageSize);



intgetRowCount(@Param("username")Stringusername);



查询模块Mapper元素实现

在SysUserMapper中添加查询元素。



定义公共的查询条件:







usernameLIKECONCAT(''%'',#{username},''%'')













select

id,

username,

email,

mobile,

valid

fromsys_users



LIMIT#{startIndex},#{pageSize}






resultType="java.lang.Integer">

selectcount()fromsys_users







查询模块Service接口方法定义及实现

定义SysUserService接口及接口方法实现。



publicinterfaceSysUserService{

PageObjectfindPageObjects(Stringusername,IntegercurrentPage);

}



接口实现类自己写:



@Service

publicclassSysUserServiceImplimplementsSysUserService{



@Autowired

@Qualifier("sysUserDao")

privateSysUserDaosysUserDao;

@Override

publicPageObjectfindPageObjects(Stringusername,

IntegerpageCurrent){

//1.查询当前页数据

intpageSize=3;

intstartIndex=(pageCurrent-1)pageSize;

Listrecords=

sysUserDao.findPageObjects(username,

startIndex,pageSize);

//2.根据条件查询总记录数

introwCount=sysUserDao.getRowCount(username);

intpageCount=rowCount/pageSize;

if(rowCount%pageSize!=0){

pageCount++;

}

//3.封装数据(当前页数据,分页信息)

PageObjectpageObject=

newPageObject<>();

pageObject.setPageCount(pageCount);

pageObject.setRowCount(rowCount);

pageObject.setPageCurrent(pageCurrent);

pageObject.setRecords(records);



returnpageObject;

}

}



查询模块Controller方法的实现



定义SysUserController类,并在类中定义do.



@Controller

@RequestMapping("/user/")

publicclassSysUserController{

@Autowired

privateSysUserServicesysUserService;

@RequestMapping("listUI")

publicStringlistUI(){

return"sys/user_list";

}

@RequestMapping("doFindPageObjects")

@ResponseBody

publicJsonResultdoFindPageObjects(

Stringusername,

IntegerpageCurrent){

PageObjectpageObject=

sysUserService.findPageObjects(

username,pageCurrent);

returnnewJsonResult(1,"ok",pageObject);

}



}





查询模块客户端页面



定义客户端页面)在WEB-INF/pages/sys目录下添加user_list.html)修改页面内容

具体页面内容:/WEB-INF/sys/user_list.html

客户端页面中JS代码实现.



js实现



functiondoGetObjects(){

varurl="user/doFindPageObjects.do";

varpageCurrent=

$("#pageId").data("pageCurrent");

if(!pageCurrent)pageCurrent=1;

varparams={"pageCurrent":pageCurrent};

//console.log($(this));

params.username=$("#searchNameId").val();

console.log(params);

$.getJSON(url,params,function(result){//JsonResult

if(result.state==1){

//将服务端返回的数据添填充在表格中

setTableTBodyRows(result.data.records);

//设置分页信息

setPagination(result.data);

}else{

alert(result.message);

}

});

}



详细js参考user_list.html



客户端页面start.html注册菜单



先定义要点击的管理元素的id,然后点击事件$("#load-user-id").click(function(){

//console.log("helloworld");

$(".container-fluid").load("user/listUI.do",function(){

$(".container-fluid").removeData("id");

});



})



总结

重点和难点分析



常见FAQ

























1-2









献花(0)
+1
(本文系金银宝100首藏)