我不开心TnT 2016-06-05 09:05 采纳率: 0%
浏览 2184
已结题

如何使用枚举定义JAVA自定义异常类

如何使用枚举定义JAVA自定义异常类然后抛到前断呢??具体实现的思路是什么呢!!!!!!在线!!!急!!!!

  • 写回答

3条回答 默认 最新

  • qq_35227774 2016-06-05 09:40
    关注

    在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeException的,但这样往往会造成异常信息说明不一致的情况,所以就想到了用枚举来解决的办法。

    1,先创建一个接口,里面有两个方法,一个是getCode, 一个是getMessage
    Java代码
    public interface ExceptionEnums {

    public int getCode();  
    
    public String getMessage();  
    

    }

    2,创建一个枚举,实现ExceptionEnums里的方法
    Java代码
    public enum DBExceptionEnums implements ExceptionEnums{

    UNIQUE_KEY(10001, "主键约束错误");  
    
    public int code;  
    public String message;  
    
    private UserEnums(int code, String message){  
        this.code = code;  
        this.message = message;  
    }  
    
    
    @Override  
    public int getCode() {  
        return code;  
    }  
    
    @Override  
    public String getMessage() {  
        return message;  
    }  
    

    }

    3,定义一个自定义的异常类
    Java代码
    public class ServiceException extends RuntimeException{

    private ExceptionEnums exceptionEnums;

    public ServiceException(ExceptionEnums exceptionEnums){

    this.exceptionEnums = exceptionEnums;

    }

    public ExceptionEnums getExceptionEnums(){

    return exceptionEnums;

    }

    .....其它get/set方法

    }

    4,业务代码中抛出ServiceException
    Java代码
    if(true){

    throw new ServiceException(DBExceptionEnums.UNIQUE_KEY);

    }

    5,Controller处理抛出的异常
    Java代码
    try{

    }catch(ServiceException se){

    logger.dubug(se.getMessage, se);

    return buildExceptionJSON(se); //返回异常JSON

    }

    buildExceptionJSON(示例)
    Java代码
    private String buildExceptionJSON(ServiceException se){

    ExceptionEnums enums = se.getExceptionEnums();

    return "{'code':"+ enums.getCode+",'message':' "+enums.getMessage()+"'}";

    }

    这样做的好处是可以高度统一所有异常返回的code及message, 如果需要更改提示信息或代号,只需更改DBExceptionEnums即可,并且可以自行添加多个异常枚举文件来分别对应不同的模板异常信息。

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题