业务系统中对象转换工具:MapperStruct
- 业务中对象转换
在业务开发过程中,70%的工作是都是在处理对象之间的转换上;对象转换最快捷高效的方式就是手动new对象和set值,但是手动转换繁琐大大降低了开发效率;BeanCopier等工具可以帮助我们快速实现对象转换,但是有存在性能活着使用不灵活等问题;有没有一种即能提高开发效率,又不影响性能等对象转换工具呢? - MapperStruct:对象转换工具
MapperStruct是一个高效的对象转换工具类;开发阶段只需要在接口方法上指定参数的映射关系,编译时系统会自动的生成对应代码,实现对象之间的转换;
MapperStruct使用可以看一下这个用户的
https://blog.csdn.net/sinat_32787481/article/details/110926360
ResultHandler:第三方服务结果和异常处理
- 第三方服务调用:接口异常
第三方服务调用结果通常分为两种,接口调用正常和不能正常调用;不能正常调用的接口在调用时会抛出异常,这种情况我们一般不用关心,直接由切面拦截记录参数和异常日志即可,然后由顶层切面转换成系统异常抛出结果对外抛出; - 第三方服务调用:接口正常
接口调用正常仅代表接口可以正常使用,我们还需要对接口执行的业务结果做区分处理;业务正常则可以继续执行之后的逻辑,业务异常则需要根据业务异常做特殊处理,比如转换成本系统中的对应的业务异常抛出给用户,这里常用的处理方式就是将第三方服务的业务异常转换成本服务中对应的异常,这就需要一个异常的映射关系,我们统一使用ResultHandler来完成处理和转换。
全局异常拦截和处理:
- 异常的产生
系统中的异常分为业务异常和未知异常;业务异常就是我们抛出的已知的异常,全局异常兰街到后根据异常转化成对应的业务提示给用户;未知的异常就是指由代码漏洞引发的系统异常(如NPE异常),这类异常代码中是需要尽量避免,但也需要在全局层面进行拦截和转换处理,因为不能将这些异常返回给用户,只能转换成系统异常提示给用户;
异常抛出的地方可以是项目中的任何地方,所以全局异常拦截器需要在接口的入口处进行拦截,如果入口出有多个拦截器,该拦截器应该在最外层。 - WEB框架异常拦截
如果我们引入了WEB框架,则SpringMVC为我们提供了全局异常拦截器interceptor,所有的controller处理器都会被拦截,只要在拦截器里做对应异常的处理和转换就可以;这里的全局异常拦截器是WEB框架组件,只能拦截Controller组件,无法拦截rpc方式调用的接口 - RPC服务异常拦截
对于RPC接口,我们则需要通过AOP切面实现拦截;在最外层Interface层之上进行拦截,记录出入参数和异常的拦截和转化;