学无先后,达者为师

网站首页 编程语言 正文

Springboot 获取响应信息,修改响应信息

作者:Coder-CT 更新时间: 2022-02-17 编程语言

通过拦截器只能获取到controller下的
restcontroller不能通过拦截器实现


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.ServletServerHttpRequest;
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @program: 获取响应信息  更改响应信息
 * @description:
 * @author: chen
 * @create:
 **/

@ControllerAdvice
public class ResponseBodyTest implements ResponseBodyAdvice<R> {

    private static final Logger logger = LoggerFactory.getLogger(ResponseBodyTest.class);


    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {

        return true;

    }


    //获取响应信息 修改响应  restResult.put覆盖响应消息
    @Override
    public R beforeBodyWrite(R restResult, MethodParameter methodParameter,
                             MediaType mediaType,
                             Class<? extends HttpMessageConverter<?>> aClass,
                             ServerHttpRequest serverHttpRequest,
                             ServerHttpResponse serverHttpResponse) {
        //System.out.println("测试返回");
        // 转换对象
        HttpServletRequest request = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest();
        HttpServletResponse response = ((ServletServerHttpResponse) serverHttpResponse).getServletResponse();

        logger.info("____________________________________________________________");
        logger.info(methodParameter.getDeclaringClass().getName());
        if ((Boolean) restResult.get("success")){
            logger.info(methodParameter.getMethod().getName()+"方法返回值:"+restResult.get("msg"));
        }else {
            logger.error(methodParameter.getMethod().getName()+"方法返回值:"+restResult.get("msg"));
        }
        logger.info("------------------------------------------------------------");
        //修改响应信息  直接覆盖掉就可以了 响应类是map
        restResult.put("msg","返回信息")
        return restResult;
    }
}


响应类

package com.molomessage.message.sys.utils;
import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 * 
 * @author chen
 * @date
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	public R() {
		put("success",true);
		put("code", 0);
		put("msg","操作成功");
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	public static R error(String msg) {
	    return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		r.put("success",false);

		return r;
	}

	public static R ok(String msg, Object obj) {
		R r = new R();
		r.put("success",true);
		r.put("msg", msg);
		r.put("data", obj);
		return r;
	}
	public static R ok(String msg) {
		R r = new R();
		r.put("success",true);
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

原文链接:https://blog.csdn.net/weixin_51216079/article/details/120082105

栏目分类
最近更新