- 参数
参数可以写注解校验,可以用切面校验。
参数校验包括长度, 取值范围,重复提交(订单号重复,批次号重复等)。
举个栗子:
收款账号类型个人还是对公,交易金额限额,汇路,同行跨行,付款账号是否存在,批次信息错误,给出错误项,下标,非空校验,正整数校验,时间类型开始时间,长度,正则,整这些行了,^_^ - 异常
先说这个问题吧,异常,一定要捕获,一定要捕获,一定要捕获!!!
至少报错了能给下游返回,能给出错误原因就比较好了,能总结出错误代码(比如成功100000,系统错误199999)就更好了,能发邮件就最好了。
好了,不扯淡,以上事实上都需要有,是一个渐进的过程吧,上线时间紧张的话,至少保证第一个。
异常要打日志, 异常要打日志, 异常要打日志!!!
最痛苦的事情就是,生产出了事故,没有日志,是自己写的代码还好,不怨别人,如果你写了代码,离职了,出事故了,人一追日志,没有日志,没有,没。。
定义异常:
异常ID,用于表示某一异常实例,每一个异常实例都有一个唯一的异常ID。
异常信息,包含必要的上下文业务信息,用于打印日志。
具体异常码,即异常码code的后3位,由各具体异常实例化时自己定义。
异常码描述。 异步
拿批量付款举例吧,批量的交易,我们一般做异步处理,也就是说入库之后我们就给下游返回已处理,之后我们起线程和上游交互。
和下游交互过程如下:
a.参数转换,入参转换为批次信息,明细信息;
b.校验相关必要信息, 入库;
和上游交互过程如下:
a.转换报文,包括一些商户号,账号,用户名,密码,注意编码格式,钱的单位&格式(分,元有无逗号之类的);
b.发送报文;
c.处理返回结果:
<1>判断是不是终态,如果是终态通知下游;
<2>更新数据库。返回dto
4个参数必不可少,返回码,返回信息,上游返回码,上游返回信息。
返回码对应系统返回状态,上游返回码对应上游返回状态,上游返回状态要递归,举个栗子:最外层报文成功了,找下一个状态,下一个状态失败了,这个状态返回;这个状态成功了,找下一个状态,好像在说绕口令,总之一句话,如果有失败的状态返回第一个失败的状态(最外层);如果没有失败的状态,返回最后一个成功状态(最里层)。
ps.
对象转xml我们用的XStream,发送报文我们用的HttpClient.
XStream maven依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.3</version>
</dependency>
HttpClient maven依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
分2元
BigDecimal.valueOf(Long.valueOf(amount)).divide(new BigDecimal(100)).toString()