返回值Response拦截器

package kf.buss.om.opsserver.interceptor;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kf.buss.om.opsserver.utils.JSONUtils;
import kf.plt.service.common.msg.ObjectRestResponse;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;

/**
 * @author wx
 * @Description:
 * @Title:
 * @Package
 * @date 2021/2/8 11:22
 */
@ControllerAdvice
public class getResponseAdvice implements ResponseBodyAdvice<Object> {
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }

    /**
     * @Description: 该方法是拦截到返回值(即response中的数据),然后操作返回值,并返回
     *
     **/
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        System.out.println("进入beforeBodyWrite方法");
        ServletServerHttpResponse responseTemp = (ServletServerHttpResponse) serverHttpResponse;
        HttpServletResponse response = responseTemp.getServletResponse();
        if (body instanceof ObjectRestResponse) {
            ObjectRestResponse result = (ObjectRestResponse) body;
            Object data = result.getMessage();
//            JSONObject jsonObject = JSONObject.parseObject(JSON.toJSON(result).toString());
//            String status = (String) jsonObject.get("status");
//            if (status.equals("200")){
//                //resultJson是data对象
//                Object resultData = jsonObject.get("data");
//                if (resultData != null){
//                    //判断是否JSON字符串
//                    String s = JSON.toJSON(resultData).toString();
//                    boolean isJsonString = JSONUtils.isJSONString(s);
//                    if (isJsonString){
//                        JSONObject dataJson = JSONObject.parseObject(JSON.toJSON(s).toString());
//                        dataJson.put("status","200");
//                        jsonObject.put("data",dataJson);
//                    }else {
//                        //不是JSON字符串就加一个DATA进去
//                        HashMap<String, Object> map = new HashMap<>();
//                        map.put("status","200");
//                        jsonObject.put("data",map);
//                    }
//                }else {
//                    HashMap<String, Object> map = new HashMap<>();
//                    map.put("status","200");
//                    jsonObject.put("data",map);
//                }
//            }
//            body = JSONObject.parse(jsonObject.toJSONString());
            System.out.println("拦截返回值:============"+data.toString());
        }
        return body;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值