为什么使用枚举?
- 在web项目中离不开controller,controller归根结底还是增删改查,通常这些操作完成后会给前端传操作状态信息。
- 在很多时候我们定义一些状态量都是使用0或者1,-1这样在数据库中定义,这样的数据存放在数据库的相应字段中方便数据读取,但是只存储数字,如果定义的表很多,对应的字段也很多,设计的状态就非常多,编码很容易分辨不清楚,一方面去数据库中查看相应字段的注释非常费时间,而且容易产生差错
- 后台定义统一的状态码信息,使程序可读性提高以及减少不同开发人员的误解
简单看一下我最近项目使用的枚举类:
public enum PageCodeEnum {
ADD_SUCCESS(1000,"新增成功!"),
ADD_FAIL(1001,"新增失败!"),
MODIFY_SUCCESS(1100,"修改成功!"),
MODIFY_FAIL(1101,"修改失败!"),
REMOVE_SUCCESS(1200,"删除成功!"),
REMOVE_FAIL(1201,"删除失败!"),
LOGIN_FAIL(1301,"登录失败!用户名密码错误!"),
SESSION_TIMEOUT(1302,"session超时,请重新登录!"),
NO_AUTH(1303,"没有权限访问请求资源,请切换账户后重试!"),
USERNAME_EXISTS(1401,"用户名已存在!"),
GROUPNAME_EXISTS(1402,"用户组名已存在!"),
SUB_MENU_EXISTS(1403,"菜单下还存在子菜单!"),
ASSIGN_SUCCESS(1500,"分配成功!"),
ASSIGN_FAIL(1501,"分配失败!"),
ORDER_SUCCESS(1600,"排序成功!"),
ORDER_FAIL(1601,"排序失败!"),;
private Integer code;
private String msg;
// 构造方法,注意:构造方法不能为public,因为enum并不可以被实例化
private PageCodeEnum(Integer code,String msg) {
this.code = code;
this.msg = msg;
}
//不需要定义set方法,防止修改
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
那么每当后台执行一个方法,就向下图一样返回状态码或信息,这是非常实用的。另外我们在编程的时候,只需要更多的去思考业务的逻辑可行性,比如查询操作的商品,就直接查询ADD_SUCCESS所对应的code,而我们则不需要关心code是什么。这个意思到这里应该就很明白了吧。
如图:返回的信息一目了然
/**
* 新增
*/
@RequestMapping("/add")
public String add(AdDto adDto, Model model) {
if (adService.add(adDto)) {
model.addAttribute("msg", PageCodeEnum.ADD_SUCCESS.getMsg());
} else {
model.addAttribute("msg" ,PageCodeEnum.ADD_FAIL.getMsg());
}
return "/content/adAdd";
}