异常处理 - 自定义异常处理(Exception)

1. 定义异常类

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class HyException extends RuntimeException {
	/**
	 * @descrption 自定义异常类
	 */
	private static final long serialVersionUID = 1L;
	
	private String errCode;
	
	private String errMsg;
	
}

 

2. 自定义异常枚举,此类可以逐步维护

import org.apache.commons.lang3.StringUtils;

/**
 * 
 *  自定义异常枚举,此类可以逐步维护
 * 
 */
public enum HyEnumExcption {
	
	BIZ_ECPT("9001001","业务执行异常"),
	REMOTE_ECPT("9001002","远程方法调用异常"),
	TEMPLATE_ECPT("9001003","模板生成异常"),
	INPUTFILE_ECPT("9001004","读取文件流异常"),
	ENCODE_ECPT("9001005","编码异常"),
	DOM4J_ECPT("9001006","XML解析异常"),
	CREATE_WEBSERVICE_ECPT("9001007","创建webservice服务异常"),
	SOAP_ECPT("9001008","创建SOAP异常"),
	FORAMT_URL_ECPT("9001009","创建SOAP异常"),
	RUN_ECPT("9002001","运行时异常");
	
	private String errCode;
	private String errMsg;
	public String getErrCode() {
		return errCode;
	}
	public void setErrCode(String errCode) {
		this.errCode = errCode;
	}
	public String getErrMsg() {
		return errMsg;
	}
	public void setErrMsg(String errMsg) {
		this.errMsg = errMsg;
	}
	private HyEnumExcption(String errCode, String errMsg) {
		this.errCode = errCode;
		this.errMsg = errMsg;
	}
	
	public static HyEnumExcption getByCode(String code) {
        if (StringUtils.isBlank(code)) {
            return null;
        }
        for (HyEnumExcption trans : values()) {
            if (StringUtils.equals(trans.getErrCode(), code)) {
                return trans;
            }
        }
        return null;
    }
    
    public static HyEnumExcption getByType(String type) {
        if (StringUtils.isBlank(type)) {
            return null;
        }
        for (HyEnumExcption trans : values()) {
            if (StringUtils.equals(trans.getErrMsg(), type)) {
                return trans;
            }
        }
        return null;
    }
	
    public static void main(String[] args) {
    	System.out.println(HyEnumExcption.getByCode("9001001").getErrMsg());
	}
	
	
}

 

3.  抛出异常  (注意,异常 需要细分)

// 1.7 提交订单生效(确认订单)
	public boolean confirmOrder(HoptRequest baseReq) {
		String rtnMessage = "";
		boolean confirm = true;
		String inputParams = "";
		String flag = HyEnumHoptRtn.FAILED.getStatus();
		try {
			Map<String, String> content = new HashMap<String, String>();
			content.put("requestid", baseReq.getRequestId());
			content.put("orderid", baseReq.getOutTradeNo());
			content.put("paymentcode", baseReq.getPaymentCode());
			inputParams = xmlUtils.genrateMsgFromXml(content,"/XH/confirmOrder.xml");
			logger.info(MARK + "confirmOrder请求报文:" + inputParams);
			rtnMessage = yyghService.confirmOrder(Base64.encodeBase64String(inputParams.getBytes("UTF-8")));
			rtnMessage = new String(Base64.decodeBase64(rtnMessage));
			logger.info(MARK + "confirmOrder返回报文:" + rtnMessage);
			
			if(StringUtils.isNotBlank(rtnMessage)){
				XStream xstream =new XStream();
				xstream.autodetectAnnotations(true);
				xstream.ignoreUnknownElements();
				xstream.setClassLoader(GreenLineWHResponse.class.getClassLoader());
				xstream.alias("response", GreenLineWHResponse.class);
				xstream.alias("returnresult", ReturnResult.class);
				GreenLineWHResponse resp=(GreenLineWHResponse)xstream.fromXML(rtnMessage);
				ReturnResult result =resp.getReturnResult();
				checkRtn(result);
				flag = HyEnumHoptRtn.SUCCESS.getStatus();
			}
			
		} catch (UnsupportedEncodingException e) {
			logger.error(">>>>>返回报文解码失败:" + e.getMessage());
			throw new HyException(HyEnumExcption.ENCODE_ECPT.getErrCode(),HyEnumExcption.ENCODE_ECPT.getErrMsg());
		} catch (IOException e) {
			logger.error(">>>>>获取xml模板失败", e.getMessage());
			throw new HyException(HyEnumExcption.INPUTFILE_ECPT.getErrCode(),HyEnumExcption.INPUTFILE_ECPT.getErrMsg());
		} catch (TemplateException e) {
			logger.error(">>>>>生成报文失败", e.getMessage());
			throw new HyException(HyEnumExcption.TEMPLATE_ECPT.getErrCode(),HyEnumExcption.TEMPLATE_ECPT.getErrMsg());
		}finally{
			this.sengMsg(baseReq.getHospitalId(), inputParams, rtnMessage, flag,baseReq.getOrderId(),MARK+"confirmOrder");
		}
		return confirm;
	}

 

 

 

4. controller 层 得到异常信息

@RequestMapping(value = "/getDoctorSchedule")
	/** 获取医生的排班信息 **/
//	public String getDoctorSchedule(@RequestParam String appid, long nowstp,String hosid, String deptid, String docid, int rowstart,int rowcount, String sign) {
	public String getDoctorSchedule(HYRequestVO rVo){	
		RtnData rtn = new RtnData();
		try{
			HyHospitalScheduleConfig  config=scheduleConfigManager.queryHyHospitalScheduleConfig(Long.valueOf(rVo.getHosid()));
			List<HyDoctorSchedule> infos = null;
			if(StringUtils.equals(HyEnumHoptType.HY_STATIC.getCode(),config.getType())){
				infos = staticService.getHyDoctorSchedules(rVo);
			}else{
				infos = service.getHyDoctorSchedules(rVo);
			}
			rtn.setRtnCode(HyEnumRtn.RTN_SUCCESS.getCode());
			rtn.setRtnMessage(HyEnumRtn.RTN_SUCCESS.getDescription());
			rtn.setData(infos);
		}catch(HyException e){
			rtn.setRtnCode(e.getErrCode());
			rtn.setRtnMessage(e.getErrMsg());
		}finally{
			//mqClient.sendDynamicRegistrationLoggerMsg(dynamicRegistrationLog);
		}
		return JSONObject.toJSONString(rtn);
	}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值