各位前辈好,因为我刚接触 Spring cloud gateway ,不太懂这个框架,想请教个问题。
我这个功能逻辑是这样的:在一个自定义的局部过滤器,通过getMultipartData()
来解析请求中的文件和字符串变量后做一些业务逻辑,然后不继续走别的过滤器,直接返回。
但是我的这份代码问题在于:
return exchange.getResponse().setComplete()
并不会触发getMultipartData()
这个流,得不到数据;return chain.filter(exchange)
,却可以触发这个流,获得数据。请问这个现象是因为什么引起呢,或者啥关键词可以提示一下?我从凌晨三四点就开始考虑这个问题了,实在无能为力。 谢谢大家。
@Slf4j
@Component
public class FileFilterGatewayFilterFactory extends
AbstractGatewayFilterFactory<FileFilterGatewayFilterFactory.ParamsConfig>{
public FileFilterGatewayFilterFactory() {
super(FileFilterGatewayFilterFactory.ParamsConfig.class);
}
@Override
public GatewayFilter apply(FileFilterGatewayFilterFactory.ParamsConfig config) {
return new OrderedGatewayFilter(((exchange, chain) -> {
parseBody(exchange).subscribe();
// 如果放行,可以触发 parseBody 里面的方法
return chain.filter(exchange);
// 如果不放行,parseBody 里面的方法根本不执行
return exchange.getResponse().setComplete();
}),10);
}
public Mono<Object> parseBody(@NotNull ServerWebExchange exchange) {
return exchange.getMultipartData().map(multipartData -> {
Map<String, Part> partMap = multipartData.toSingleValueMap();
Part file = partMap.get("file");
FormFieldPart bizName = (FormFieldPart) partMap.get("name");
return Result.buildSuccessResult("成功", null);
});
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.