==========

先看该篇文章的示例接口:

红色框框里面就是返回的 response 数据 。

现在我们想要的就是 在返回给到调用方(前端、第三方等)前,我们抓出来数据,随便改一下东西。

例如: 我要把里面的message 提示语改了。

新建一个全局过滤器:

WrapperResponseGlobalFilter.java

import com.alibaba.fastjson.JSONObject;

import com.google.common.base.Joiner;

import com.google.common.base.Throwables;

import com.google.common.collect.Lists;

import org.apache.commons.lang3.StringUtils;

import org.reactivestreams.Publisher;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;

import org.springframework.cloud.gateway.filter.GlobalFilter;

import org.springframework.core.Ordered;

import org.springframework.core.io.buffer.DataBuffer;

import org.springframework.core.io.buffer.DataBufferFactory;

import org.springframework.core.io.buffer.DataBufferUtils;

import org.springframework.http.HttpStatus;

import org.springframework.http.server.reactive.ServerHttpResponse;

import org.springframework.http.server.reactive.ServerHttpResponseDecorator;

import org.springframework.stereotype.Component;

import org.springframework.web.server.ServerWebExchange;

import reactor.core.publisher.Flux;

import reactor.core.publisher.Mono;

import java.nio.charset.Charset;

import java.util.List;

import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR;

/**

  • @Author JCccc

  • @Description 拦截返回数据, 修改返回数据

  • @Date 2021/8/16 19:22

*/

@Component

public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {

private static final Logger log = LoggerFactory.getLogger(WrapperResponseGlobalFilter.class);

@Override

public int getOrder() {

// -1 is response write filter, must be called before that

return -2;

}

private static Joiner joiner = Joiner.on(“”);

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

ServerHttpResponse originalResponse = exchange.getResponse();

DataBufferFactory bufferFactory = originalResponse.bufferFactory();

ServerHttpResponseDecorator response = new ServerHttpResponseDecorator(originalResponse) {

@Override

public Mono writeWith(Publisher<? extends DataBuffer> body) {

if (getStatusCode().equals(HttpStatus.OK) && body instanceof Flux) {

// 获取ContentType,判断是否返回JSON格式数据

String originalResponseContentType = exchange.getAttribute(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR);

if (StringUtils.isNotBlank(originalResponseContentType) && originalResponseContentType.contains(“application/json”)) {

Flux<? extends DataBuffer> fluxBody = Flux.from(body);

//(返回数据内如果字符串过大,默认会切割)解决返回体分段传输

return super.writeWith(fluxBody.buffer().map(dataBuffers -> {

List list = Lists.newArrayList();

dataBuffers.forEach(dataBuffer -> {

try {

byte[] content = new byte[dataBuffer.readableByteCount()];

dataBuffer.read(content);

DataBufferUtils.release(dataBuffer);

list.add(new String(content, “utf-8”));

} catch (Exception e) {

log.info(“加载Response字节流异常,失败原因:{}”, Throwables.getStackTraceAsString(e));

}

});

String responseData = joiner.join(list);

System.out.println(“responseData:”+responseData);

byte[] uppedContent = new String(responseData.getBytes(), Charset.forName(“UTF-8”)).getBytes();

originalResponse.getHeaders().setContentLength(uppedContent.length);

return bufferFactory.wrap(uppedContent);

}));

}

}

return super.writeWith(body);

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。

这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。

最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!

Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
在这里插入图片描述

千万别上当!!!

Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
[外链图片转存中…(img-cw4nEY80-1712111793599)]

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐