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

标签: java 定义 常在 | 发表时间:2015-09-24 07: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泛型应用实例 - 自定义泛型类,方法

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

java注解应用实例 - Annotation, 自定义注解, 注解类规则

- - ITeye博客
本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl.iteye.com/topics/download/f74972df-234f-30c9-aadd-ca2ed1376bc2.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

java面试题

- - Java - 编程语言 - ITeye博客
 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象.  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法. 对象的一个新类可以从现有的类中派生,这个过程称为类继承.

Java使用memcached

- - 互联网 - ITeye博客
首先到 http://danga.com/memcached下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可. 然后是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:>;memcached.exe -d install<br>c:>memcached.exe -l 127.0.0.1 -m 32 -d start.