Java自定义异常在项目中的应用

标签: java 定义 异常 | 发表时间:2015-09-24 15:04 | 作者:Javahuhui
出处:http://www.iteye.com

在Java的一些项目中,在需要提供对外接口时,常常会有必要自定义响应一些code和message(例:0000:Success,500:Error),特别是在对接移动端项目中最为常见。为更加方便提供这些接口的程序员的开发,可以应用Java的自定义异常处理来实现。

 

现有一移动端应用,需要对接我们项目,其中有一个用户登录接口,其接口的请求和响应参数如下:

申请参数

 

字段名

描述

允许为空

备注

username

用户名

N

 

password

密码

N

 

……

 

 

 

返回数据

 

字段名

描述

允许为空

备注

code

响应码

N

 

message

响应信息

N

 

username

用户名

N

 

……

 

 

 

 

制定一套响应信息库,创建code.properties来存储响应信息库:

code0000=0000

msg0000=成功

code500=500

msg500=失败

code0001=0001

msg0001=用户名不能为空

code0002=0002

msg0002=密码不能为空

code0003=0003

msg0003=用户名或密码不正确

在这里,约定前缀是code和msg,后面带的内容(例0000)一定要与其对应的code值相同。

 

接下来编写自定义异常处理:

先创建一个响应信息对象ResponseData.java

 

public class ResponseData {
        public static final String CODE = "code";
        public static final String MSG = "msg";
	private String code;
	private String msg;
	
	public ResponseData() {}
	public ResponseData(String code) {
		this.setCode(code);
	}
	
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = CODE+code;
		this.msg = PropertiesUtil.get("code", MSG+code);
	}
	
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}

}

 

读取资源文件的工具类

public class PropertiesUtil {
	private static Properties prop = new Properties();
	
	public static String get(String fileName, String key){
		try {
			prop.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName+".properties"));
		} catch (IOException e) {
			new RuntimeException("不存在此("+fileName+")资源文件!");
		}
		return prop.getProperty(key);
	}
	
}

 

最后创建一个自定义异常类MyException.java

public class MyException extends RuntimeException {
	private String name;
	private ResponseData data;
	
	public MyException(ResponseData data) {
		super(data.getMsg());
		this.data = data;
	}
	public MyException(String name, ResponseData data) {
		super(name+":"+data.getMsg());
		this.name = name;
		this.data = data;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public ResponseData getData() {
		return data;
	}
	public void setData(ResponseData data) {
		this.data = data;
	}

}

 

至此,自定义异常处理相关代码就编写完成。

接下看看它的应用:

public void testException() {
	try {
		String username = "admin",password = "111111";//充当请求参数
		//1、验证请求参数
		checkParams(username,password);
		//2、验证通过,响应user信息
		responseClient(username);
	} catch (MyException e) {
		responseClient(e.getData());
	} catch (Exception e) {
		responseClient(new ResponseData("500"));
	}
}

private void responseClient(String username) {
	responseClient(new ResponseData("0000"));
	System.out.println(username);
}

private void responseClient(ResponseData data) {
	System.out.println(data.getCode()+":"+data.getMsg());
}

private void checkParams(String username, String password) {
	if(StringUtils.isEmpty(username))
		throw new MyException(new ResponseData("0001"));
	if(StringUtils.isEmpty(password))
		throw new MyException(new ResponseData("0002"));
	if(!USERNMAE.equals(username) || !PASSWORD.equals(password))
		throw new MyException(new ResponseData("0003"));
}

 

这样做的好处就是可以将代码分块,当需要提供更复杂的接口时,可以更加清晰地写下处理流程;而且你会发现做一些参数或流程验证的时候,不再需要if...else...了,代码简单优美。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 定义 异常] 推荐:

Java自定义异常在项目中的应用

- - Java - 编程语言 - ITeye博客
在Java的一些项目中,在需要提供对外接口时,常常会有必要自定义响应一些code和message(例:0000:Success,500:Error),特别是在对接移动端项目中最为常见. 为更加方便提供这些接口的程序员的开发,可以应用Java的自定义异常处理来实现. 现有一移动端应用,需要对接我们项目,其中有一个用户登录接口,其接口的请求和响应参数如下:.

Java异常

- - CSDN博客推荐文章
“好的程序设计语言能够帮助程序员写出好程序,但是无论哪种语言都避免不了程序员写出坏的程序.                                                                                                                          ----《Java编程思想》.

浅谈java异常

- - 移动开发 - ITeye博客
在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题. 虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常. 绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败. 之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意.

Java异常处理策略

- - 研发管理 - ITeye博客
任务与预先设定的规则不相符的情况都可以称之为异常. 但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性. 用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块. 码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程.

Java异常处理的陋习展播

- - 博客 - 伯乐在线
注:本文来自志军(@ _Zhijun )在微博推荐的一篇转载于2007年09月27的旧文,他说“没法找到原作者”. 的确,我也花了半个多小时在找原作者. 先是找到了一个标注“2005年6月18日转字Java研究组织”的文章(“Java研究组织”的域名已过期),后来找到是大连理工大学碧海青天BBS上一个发于的2003年5月中旬的 合集帖子,其中提到一条来自 CSDN 的链接,可惜该链接已挂,否则应该能找到作者的.

Java异常的性能分析

- - Java译站
在Java中抛异常的性能是非常差的. 通常来说,抛一个异常大概会消耗100到1000个时钟节拍. 通常是出现了意想不到的错误,我们才会往外抛异常. 也就是说,我们肯定不希望一个进程一秒钟就抛出上千个异常. 不过有时候你确实会碰到有些方法把异常当作事件一样往外抛. 我们在 这篇文章中已经看到一个这样的典范):sun.misc.BASE64Decoder之所以性能很差就是因为它通过抛异常来对外请求道,”我还需要更多的数据“:.

Java Socket常见异常处理

- - BlogJava-qileilove
java网络编程Socket通信中,通常会遇到以下异常情况:.   第1个异常是 java.net.BindException:Address already in use: JVM_Bind.   该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时.

Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR

- - CSDN博客互联网推荐文章
Oracle有三种类型的异常错误:. 1. 预定义(Predefined)异常. ORACLE预定义的异常情况大约有24个. 对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发. 2. 非预定义(Predefined)异常. 即其他标准的ORACLE错误. 对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发.

java泛型应用实例 - 自定义泛型类,方法

- - ITeye博客
注:  转载请注明出处: http://hejiangtao.iteye.com ,  用于商业得给我分成. 本文主要讲解道 java泛型类,泛型方法的应用实例 , 从 这里 可以下载到完整的java代码工程:   http://download.csdn.net/detail/hejiangtao/3996520.

捕获Java线程池执行任务抛出的异常

- - BlogJava-首页技术区
Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常,. 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了. 通常java.lang.Thread对象运行设置一个默认的异常处理方法:. 而这个默认的静态全局的异常捕获方法时输出堆栈.