赞
踩
在实际开发中一般会自定义一些异常,这样对前端是分友好,具体实现如下。
创建一个枚举类,来统一管理所有的自定义异常信息,关于枚举类的一些常用方法及规则后边有记录:
创建枚举类
- public enum BusinessExceptionEnum {
-
- USER_LOGIN_NAME_EXIST("用户名称已存在",50001),
- USER_LOGIN_CODE_ERROR("验证码错误", 50002),
- USER_LOGIN_PASSWORD_ERROR("登录密码错误", 50003),
- USER_LOGIN_NAME_ERROR("用户名不正确", 50004);
-
- String name;
- int code;
-
- BusinessExceptionEnum(String name, int code) {
- this.name = name;
- this.code = code;
- }
- public String getName() {
- return name;
- }
- public int getCode() {
- return code;
- }
- }
创建自定义异常类BusinessException ,这个类必须要继承 RuntimeException类 :
- //需要编写一个exception类继承RuntimeException类
- public class BusinessException extends RuntimeException{
- private int code;
- // new BusinessException()时,参数,必须要穿传 BusinessExceptionEnum.xxx
- public BusinessException(BusinessExceptionEnum code) {
- super(code.getName());
- // 当new BusinessException() 时,获取枚举中的code 赋值给 BusinessException 中的code
- this.code = code.getCode();
- }
- public int getCode() {
- return code;
- }
- }
在捕获全局异常类中来添加 BusinessException :
- @ControllerAdvice
- public class ControllerExceptionHandler {
- /**
- * 自定义异常处理
- * @param e
- * @return ComResponse
- * BindException 有针对性的对异常类做处理
- */
-
- // 登陆时的自定义异常的处理
- @ExceptionHandler(value = {BusinessException.class})
- @ResponseBody
- public ComResponse loginError(HttpServletRequest request, HttpServletResponse response, BusinessException e) {
- ComResponse comResponse = new ComResponse();
- comResponse.setMsg(e.getMessage());
- comResponse.setCode(e.getCode());
- return comResponse;
- }
- }
测试:
- @RestController
- @RequestMapping("/category")
- public class CategoryController {
-
- @RequestMapping(value = "/t")
- public void test() {
- throw new BusinessException(BusinessExceptionEnum.USER_LOGIN_NAME_ERROR);
- }
-
- }
- public enum Enums {
- USER_LOGIN_NAME_EXIST("用户名称已存在"),
- USER_LOGIN_CODE_ERROR("验证码错误"),
- USER_LOGIN_PASSWORD_ERROR("登录密码错误"),
- USER_LOGIN_NAME_ERROR("用户名不正确");
-
- String name;
- Enums(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
(1)枚举类名.常量名.getName( )
获取枚举类中常量的描述,上边name属性对应的就是常量中的描述
- public void getTest() {
- System.out.println(Enums.USER_LOGIN_CODE_ERROR.getName());
- }
(2) 枚举类名.常量名.setName( )
修改常量中的描述。
- public void getTest() {
- Enums.USER_LOGIN_CODE_ERROR.setName("修改常量描述");
- System.out.println(Enums.USER_LOGIN_CODE_ERROR.getName());
- }
(3)枚举类名.常量名
返回的是常量名,类型是这个枚举类的类型。
- public void getTest() {
- System.out.println(Enums.USER_LOGIN_CODE_ERROR);
- System.out.println(Enums.USER_LOGIN_CODE_ERROR instanceof Enums);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。