import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ssss.annotation.NeedEditResponseBody;
import com.ssss.entity.JsonResultUtil;
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice{
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public Object beforeBodyWrite(Object returnValue, MethodParameter arg1, MediaType arg2, Class arg3, ServerHttpRequest arg4,
ServerHttpResponse arg5) {
if(returnValue instanceof JsonResultUtil) {
try {
JsonResultUtil msg=(JsonResultUtil) returnValue;
if(msg.get("data") instanceof ArrayList) {
logger.info("MyResponseBodyAdvice getTypeName-->" + msg.get("data").getClass().getTypeName());
String data = new Gson().toJson(msg.get("data"));
if(data.contains("http://znx.****.com")) {
Gson gson1=new Gson();
logger.info("msg.get(\"data\").getClass().getTypeName()-->" + msg.get("data").getClass().getTypeName());
List list= gson1.fromJson(data.replaceAll("http://znx.****.com", "http://znxcdn.****.com"), new TypeToken<List>() {}.getType());
msg.put("data", list);
}
}else if(msg.containsKey("data") && msg.get("data") != null) {
logger.info("MyResponseBodyAdvice getTypeName-->" + msg.get("data").getClass().getTypeName());
String data = new Gson().toJson(msg.get("data"));
String className = msg.get("data").getClass().getTypeName();
Class pClass=Class.forName(className);
//构造器
Constructor c= pClass.getConstructor();
//通过构造器实例化
Object obj = c.newInstance();
if(data.contains("http://znx.*****.com")) {
Gson gson1=new Gson();
logger.info("msg.get(\"data\").getClass().getTypeName()-->" + msg.get("data").getClass().getTypeName());
obj = gson1.fromJson(data.replaceAll("http://znx.****.com", "http://znxcdn.****.com"), obj.getClass());
msg.put("data", obj);
}
}
}catch(Exception e) {
e.printStackTrace();
logger.info("MyResponseBodyAdvice 出错-->" + e.getMessage());
}
}
logger.info("MyResponseBodyAdvice-->" + new Gson().toJson(returnValue));
//统一修改返回值/响应体
//返回修改后的值
return returnValue;
}
@Override
public boolean supports(MethodParameter arg0, Class arg1) {
NeedEditResponseBody anno = arg0.getMethod().getAnnotation(NeedEditResponseBody.class);
logger.info("NeedEditResponseBody --->" + anno);
if(anno != null) { //只有方法上有NeedEditResponseBody,才会对json数据进行再处理,将资源改为cdn资源
return true;
}
return false;
}
}

石野
- 粉丝: 1
最新资源
- 大数据时代翻译职业化的教学模式研究.docx
- 《软件工程实用教程》第11章软件项目管理.ppt
- (源码)基于LQR算法的机器人路径规划与跟踪系统.zip
- PLC控制的自动售货机设计-(2).doc
- 基于VC的网络聊天系统研究设计与实现.doc
- 安全管理事业部-:网上银行网络通讯安全解决方案.ppt
- 企业项目管理中的沟通和成本.docx
- 利用MATLAB实现连续信号采样与重构仿真课程设计.doc
- 大数据时代高校图书馆学科竞争力分析系统研究.docx
- 浅析网络战争中的国际法问题.docx
- 煤矿立井提升系统安全性分析及管理.docx
- 全国计算机等级测验二级java上机题库.doc
- 交通线路选择软件的研究与设计开发与实现研究与设计开发.doc
- 室内蜂窝移动通网络技术概述.doc
- 数学实验云计算辅助教学平台的建设初探.docx
- (源码)基于Node.js的个人博客网站.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


