/**
 * @Author zf
 * @ClassName CustomResponseBodyAdvice.java
 * @ProjectName FullCard
 */
@RestControllerAdvice
public class CustomResponseBodyAdvice implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        // 在这里可以根据需要对接口进行过滤,决定是否要进行响应数据的处理
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String requestUrl = request.getRequestURI();
        // 判断当前请求的URL是否在白名单中
        List<String> whitelistUrls = whitelistUrls();
        if(whitelistUrls.contains(requestUrl)){
            return false; // 当前URL在白名单中,不进行响应数据的处理
        }
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 将body转换为JSON对象
        JSONObject jsonObj = new JSONObject(body);
        // 对接口响应数据进行处理
        ……  ……
        // 返回修改后的响应数据和response
        return jsonObj;
    }

    // 白名单列表
    private List whitelistUrls(){
        ArrayList<String> list = new ArrayList<>();
        list.add("/swagger-resources");
        list.add("/v2/api-docs");
        return list;
    }
}

PS:可以用于接口响应结果进行加密等处理。

最后修改:2023 年 07 月 06 日
给我一点小钱钱也很高兴啦!o(* ̄▽ ̄*)ブ