package com.java110.core.language; import com.alibaba.fastjson.JSONObject; import com.java110.core.trace.Java110TraceFactory; import com.java110.dto.trace.TraceParamDto; import com.java110.utils.constant.CommonConstant; import com.java110.utils.factory.ApplicationContextFactory; import com.java110.utils.util.StringUtil; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * trace log api aop */ @Component @Aspect public class Java110LangAop { @Pointcut("@annotation(com.java110.core.language.Java110Lang)") public void dataProcess() { } //环绕通知,环绕增强,相当于MethodInterceptor @Around("dataProcess()") public Object around(ProceedingJoinPoint pjp) throws Throwable { Object out = null; RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); String lang = request.getHeader(CommonConstant.JAVA110_LANG); out = pjp.proceed(); if (StringUtil.isEmpty(lang) || "zh-cn".equals(lang)) { return out; } if (out instanceof ResponseEntity) { String body = ((ResponseEntity) out).getBody().toString(); if (!StringUtil.isJsonObject(body)) { return out; } JSONObject outJson = JSONObject.parseObject(body); String msg = outJson.getString("msg"); Language language = ApplicationContextFactory.getBean(lang, Language.class); if (language == null) { return out; } msg = language.getLangMsg(msg); outJson.put("msg", msg); return new ResponseEntity(outJson.toJSONString(), ((ResponseEntity) out).getStatusCode()); } return out; } }