最近博主在做的就是把TR系统所有对接APP接口的返回信息进行拦截做国际化处理,尝试用自定义注解对需要校验的Controller方法进行拦截,根据这些参数确定唯一资源,通过对接口返回的参数进行拦截,根据返回的错误码获取文案系统中配置的文案信息返回消息提示给前端。
<1>
定义切点,自定义一个名为ParameterIntHandler的注解
/**
* @Author: zengxin
* APP固定格式的响应
* @Date: 2019/11/26
*/
@Target({
ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ParameterIntHandler {
}
<2>
定义切面,利用环绕通知进行方法拦截和校验逻辑处理
我这里是针对异常也做了处理,通过捕获不同异常类型对返回的参数errorCode进行国际化处理。
@Pointcut("@annotation(com.jd.overseas.hkbank.sme.core.aop.ParameterIntHandler)")
public void validate() {
}
@Around("validate()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) {
String language = "";
try {
Object str = proceedingJoinPoint.proceed();//获取返回信息
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
HttpServletRequest request = sra.getRequest();
LOGGER.info("拦截到请求url:{}",request.getRequestURI().toString());
Object[] args = proceedingJoinPoint.