栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot中 @ControllerAdvice 对响应结果统一处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot中 @ControllerAdvice 对响应结果统一处理

这种处理,返回前端成了字符串,不能使用,而且时间也变成了number类型
package com.cpiinfo.iot.isolar.config;

import com.alibaba.fastjson.JSON;
import com.cpiinfo.iot.commons.utils.Result;
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.http.server.ServletServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import javax.servlet.ServletResponse;


@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

        String responseBodyStr = JSON.toJSONString(body);
        System.out.println("处理前的数据->>>>>> "+ responseBodyStr);
        String replaceAllResult = responseBodyStr.replaceAll("""", ""-"");
        System.out.println("处理后的数据->>>>>> "+ replaceAllResult);

        return JSON.parseObject(replaceAllResult,Result.class);
    }
}

第二种 返回前端一样的是一个json对象,需要处理什么类型可以自定义
package com.cpiinfo.iot.isolar.config;

import cn.hutool.core.util.ObjectUtil;
import com.cpiinfo.iot.commons.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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 java.io.Serializable;
import java.lang.reflect.Field;
import java.util.Collection;


@Slf4j
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice, Serializable {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        String type = selectedContentType.getType();
        String subtype = selectedContentType.getSubtype();
        if (!"application".equals(type) || !"json".equals(subtype)) {
            return body;
        }

        try {
            Object data = ((Result) body).getData();
            sensitiveHidden(data);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return body;
    }

    
    private void sensitiveHidden(Object body) {
        if (body == null || StringUtils.isBlank(body.getClass().getName())) {
            return;
        }

        parse(body);
    }



    private void parse(Object body) {
        Field[] declaredFields = body.getClass().getDeclaredFields();
        try {
            for (Field declaredField : declaredFields) {
                Class type = declaredField.getType();
                // 处理集合
                if (Collection.class.isAssignableFrom(type)) {
                    declaredField.setAccessible(true);
                    Collection collection = (Collection) declaredField.get(body);
                    for (Object o : collection) {
                        parse(o);
                    }
                    // 处理字符串(把空字符串修改为-)
                } else if (String.class.isAssignableFrom(type)) {
                    declaredField.setAccessible(true);
                    String str = (String) declaredField.get(body);
                    if (ObjectUtil.isEmpty(str)) {
                        declaredField.set(body, "-");
                    }
                    // 处理引用类型
                } else if (!type.isPrimitive() && !Serializable.class.isAssignableFrom(type)) {
                    declaredField.setAccessible(true);
                    parse(declaredField.get(body));
                }
            }
        } catch (IllegalAccessException e) {
            log.info("-------------->MyResponseBodyAdvice --> sensitiveHidden --> 返回结果空字符串统一处理报错<-------------------");
            e.printStackTrace();
        }
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号