
URI uri = exchange.getRequest().getURI(); StringBuilder query = new StringBuilder(); String originalQuery = uri.getRawQuery(); if (StringUtils.hasText(originalQuery)) { query.append(originalQuery); if (originalQuery.charAt(originalQuery.length() - 1) != '&') { query.append('&'); } } params.forEach((key,value) ->{ query.append(key); query.append('='); query.append(value); query.append('&'); }); try { URI newUri = UriComponentsBuilder.fromUri(uri).replaceQuery(query.toString()).build(true).toUri(); ServerHttpRequest request = exchange.getRequest().mutate().uri(newUri).build(); return chain.filter(exchange.mutate().request(request).build()); } catch (RuntimeException var8) { throw new IllegalStateException("Invalid URI query: \"" + query.toString() + "\""); } 以上这种写法,参考了自带的 AddRequestParameter 过滤器的写法
1 Renco OP 到具体下游服务的时候,并没有获取到请求参数信息 |
2 Renco OP 大概发现问题了,和过滤器的执行顺序似乎有关系 |
3 chihiro2014 Nov 27, 2021 一般需要实现 ordered ,才能让你的过滤器生效 |
4 Renco OP @chihiro2014 实现了,发现这种写法的过滤器 order 一定要大于 RouteToRequestUrlFilter 这个,具体下放到下游服务的时候好像取的是这里的 |
5 chihiro2014 Nov 27, 2021 @Renco 又先后顺序的,这就是为什么要实现它的原因=。= |