1.产生异常代码
String a = "a3"; intb = Integer.parseInt(a);
2.自定义异常类
继承关系:DataAccessException 继承ServiceExceptioextends RestWebServiceException继承Exception
这样做的好处就是:dao层异常抛DataAccessException 这样service层可以覆盖到(子类的异常)然后在网上抛,到rest层,抛RestWebServiceException (也是可以get到service层异常的)
最后统一由拦截器,拦截所以异常然后统一处理。这样做的好处是可以打印错误的行数-好定位问题。
如果自己try catch了,那么在try内报错只在throw Exception时记录行数,也就是这能记录throw那一行无法定位try里哪一行
publicclass DataAccessException extends ServiceException { privatestaticfinallongserialVersionUID = 1L; private String retCd; // 异常对应的返回码 private String msgDes; // 异常对应的描述信息 public DataAccessException() { super(); } public DataAccessException(String message) { super(message); msgDes = message; } public DataAccessException(String retCd, String message) { super(); this.retCd = retCd; this.msgDes = message; } public DataAccessException( Throwable throwable) { super(throwable); } public DataAccessException(String message,Throwable throwable) { super(message,throwable); msgDes = message; } public DataAccessException(String retCd, String message,Throwable throwable) { super(message,throwable); this.retCd = retCd; this.msgDes = message; }
publicclass ServiceException extends RestWebServiceException { privatestaticfinallongserialVersionUID = 1L; private String retCd; // 异常对应的返回码 private String msgDes; // 异常对应的描述信息 。。。同上
publicclass RestWebServiceException extends Exception { privatestaticfinallongserialVersionUID = 1L; private String retCd; // 异常对应的返回码 private String msgDes; // 异常对应的描述信息
看看,到层和service层,rest层如何处理的
//service层直接抛出异常即可 publicint addComUser(ComUser user) throwsServiceException{ return comUserMapper.insert(user); }
看看拦截器如何实现: /** * 异常拦截器 * @author:andy * @version:1.0 */ publicclass ErrorInterceptor extends AbstractPhaseInterceptor<Message> { Logger logger = LoggerFactory.getLogger(getClass()); public ErrorInterceptor(String phase) { super(phase); } public ErrorInterceptor(){ super(Phase.RECEIVE); } @Override publicvoid handleMessage(Message msg) throws Fault { } //出现错误输出错误信息和栈信息 publicvoid handleFault(Message message) { //可以拦截所以异常除了WebApplicationException Exception exeption=message.getContent(Exception.class); logger.error(exeption.getMessage(),exeption);//只有logger.xxx("",e);2个参数的可以打印异常详细信息,其他参数的函数都不行 } }
//rest层,也是直接抛出异常,不要自己try catch。 @GET @Path("/getUserById/{id}") public ComUser getComUserById(@PathParam("id") intid) throws RestWebServiceException{ ComUser user = null; user = comUserService.getComUserById(id); //业务返回 if(null == user){ ResponseBuilder builder = Response.status(Status.BAD_REQUEST); builder.type(MediaType.APPLICATION_JSON); builder.entity(new ResultJson(ResultJson.FAILURE,"访问数据不存在")); thrownew WebApplicationException(builder.build()); } return user; }