Java自定义异常信息
通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常
1、Spring 注入异常处理类
<bean id ="commonExceptionHandler" class = "com..test.common.exception.handler.CommonExceptionHandler">
2、注入的异常处理类,主要是重写resolveException方法
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import com.test.common.constant.ERRORConstants;
import com.test.common.constant.GlobalConstants;
import com.test.common.dto.ResultDTO;
import com.test.common.exception.ServiceException;
import com.test.common.exception.SysException;
import com.test.common.util.SpringContextHolder;
import com.test.common.util.StringUtil; public class CommonExceptionHandler implements HandlerExceptionResolver {
private static final Logger LOG = LoggerFactory.getLogger(CommonExceptionHandler.class); /**
* @param request 参数
* @param response 参数
* @param obj 参数
* @param e 参数
* @return modelview
*/
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) {
ResultDTO result;
if (e instanceof SysException) {
result = handleSysException((SysException) e);
} else if (e instanceof ServiceException) {
result = handleServiceException((ServiceException) e);
} else {
result = handleSysException(new SysException(ERRORConstants.COMMON_SYSTEM_ERROR, e));
} responseOutWithJson(response, result);
return new ModelAndView();
}
private ResultDTO handleSysException(SysException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
if(StringUtil.isNotEmpty(ex.getMsg())){
result.setMessage(ex.getMsg());//这里获取的是自己设置的信息
}else {
result.setMessage(SpringContextHolder.getMessage(ex.getCode(), null));
}
LOG.error(new StringBuilder().append(result.getCode()).append(result.getMessage()).toString(), ex);
return result;
} private ResultDTO handleServiceException(ServiceException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
result.setMessage(SpringContextHolder.getMessage(ex.getCode(), null));
LOG.error(new StringBuilder().append(result.getCode()).append(result.getMessage()).toString());
return result;
} protected void responseOutWithJson(HttpServletResponse response, Object responseObject) { JSONObject responseJSONObject = JSONObject.fromObject(responseObject); String jsonString = responseJSONObject.toString(); response.setCharacterEncoding(GlobalConstants.DEFAULT_ENCODING);
response.setContentType("application/json; charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.append(jsonString);
LOG.debug("返回是\n");
LOG.debug(jsonString);
} catch (IOException e) {
LOG.debug("Error responseOutWithJson");
} finally {
if (out != null) {
out.close();
}
}
} }
3、自定义系统异常类
package com.test.common.exception.base;
public class BaseCommonException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String code;
private String msg;//用于存放异常信息
/**
* 构造函数
*/
public BaseCommonException() {
super();
}
/**
*
* @param cause 参数
*/
public BaseCommonException(Throwable cause) {
super(cause);
}
/**
*
* @param code 参数
*/
public BaseCommonException(String code) {
this.setCode(code);
}
/**
*
* @param code 参数
* @param e 参数
*/
public BaseCommonException(String code, Throwable e) {
super(e);
this.setCode(code);
}
/**
*
* @param code 参数
* @param e 参数
*/
public BaseCommonException(String code, Throwable e,String msg) {
super(e);
this.setCode(code);
this.setMsg(msg);
}
/**
*
* @return code
*/
public String getCode() {
return code;
}
/**
*
* @param code 参数
*/
public void setCode(String code) {
this.code = code;
}
/**
*
* @return msg
*/
public String getMsg() {
return msg;
}
/**
*
* @param msg 参数
*/
public void setMsg(String msg) {
this.msg = msg;
}
}
4、Service类
public boolean test() {
String msg = "";
try {
msg = "自定义信息";
return true;
} catch (Exception e) {
throw new BaseCommonException("300",e,
"失败信息:"+msg);
}
}
Java自定义异常信息的更多相关文章
- Java自定义异常类的简单实现
学习目标: 掌握自定义异常类 例题: 需求:自定义异常类,简单判断是否注册成功 代码如下: RegisterException类: /** * @author YanYang * @projectNa ...
- JAVA类型信息——反射机制
JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...
- JAVA类型信息——Class对象
JAVA类型信息——Class对象 一.RTTI概要 1.类型信息RTTI :即对象和类的信息,例如类的名字.继承的基类.实现的接口等. 2.类型信息的作用:程序员可以在程序运行时发现和使用类型信息. ...
- Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...
- Java类型信息
一.引言 最近在阅读<Java编程思想>,学习一下java类型信息,现在做一下总结.Java如何让我们在运行时识别对象和类的信息的.主要有两种方式:一种是传统的“RTTI”,它假定我们在编 ...
- jQuery显示SQL存储过程自定义异常信息
学习MVC应用开发,改变了Insus.NET以前ASP.NET的开发习惯,以前开发均是服务器端,而现在使用jQuery的Ajax在实现.想到与考虑了很多问题,也遇上很多问题,一些解决了,一些还留下,望 ...
- 查看Linux、Tomcat、JAVA版本信息
查看Linux.Tomcat.JAVA版本信息 [root@test1 bin]# cd /usr/local/tomcat/tomcat_jdt/bin/ [root@test1 bin]# sh ...
- JAVA类型信息——Class对象(转载)
JAVA类型信息--Class对象 一.RTTI概要 1.类型信息RTTI :即对象和类的信息,例如类的名字.继承的基类.实现的接口等. 2.类型信息的作用:程序员可以在程序运行时发现和使用类型信息. ...
- jps不显示java进程信息
本来想自己整理,发现已经有前人整理,并且完美解决了我的问题,故转载,感谢分享 转自:http://trinea.iteye.com/blog/1196400 对于jps较熟悉可以直接查看第二部分的分析 ...
随机推荐
- JS arguments转array
JS arguments转array? Array.prototype.slice.call(arguments)
- mysql+C#
MySqlParameter[] prams = ]; prams[] = new MySqlParameter("@personindex", personindex); pra ...
- Discuz论坛UCenter无法登录问题修复方法完美解决无限刷新问题
级20141225版本后,出现UC无法登录问题[完美]解决方法.自圣诞节发布 Discuz! X3.2 R20141225 小编手头多个站点也都在升级后出现了,后台登录[ UCenter]假死情况, ...
- mysql常用的优化措施
http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html
- Java 中的四种引用
1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...
- maven struts2工程StrutsPrepareAndExecuteFilter cannot be cast to javax.servlet.Filter
maven搭建struts2工程时报错 严重: Exception starting filter struts2java.lang.ClassCastException: org.apache.st ...
- java环境变量配置备忘录
用鼠标右击“我的电脑”->属性->高级->环境变量系统变量->新建->变量名:JAVA_HOME 变量值:D:\Program Files\Java\jdk1.6.0_1 ...
- Java 开发小常识
从理论上来讲Java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么多理由来证明它确实占内存呢?两个字,陋习. 1.别用new Boolean().在很多场景中Boolean类型是必 ...
- 【微软大法好】VS Tools for AI全攻略(4)——选择适合自己的虚拟机
当我们选择好了自己的虚拟机后,也许效果不尽如人意.就比如我,发现代码在训练一段时间之后,CPU的使用率会下降. 这个时候我们就要开始考虑,是不是我们选择的虚拟机不是适合自己的型号. Azure的虚拟机 ...
- Altium_Designer-各种布线总结
1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...