Spring 网关使用查询字符串参数构建不正确 URL
Spring Gateway builds incorrect URL with query string parameters
我有一个 Spring 具有此映射的网关微服务:
- id: advertisementService4
uri: lb://advertisementService
predicates:
- Path=/public/breeds/**
filters:
- RewritePath=/public/breeds/(?<segment>/?.*), /v1/public/breeds/$\{segment}
如果我用 Postman 调用此 url: http://192.168.99.1:8050/public/breeds/500,gateWay 服务会解析映射并以正确的方式构建新的 url(到 /v1/public/breeds/500):
但是如果我调用此 url http://192.168.99.1:8050/public/breeds?petType=Dog,gateWay 服务会选择正确的映射,但它会以错误的方式构建 url:
gateWay 服务构建 http://7a32a826ec7a:8070/public/breeds?petType=Dog 而不是 http://7a32a826ec7a:8070/v1/public/breeds?petType=Dog(带有 v1 在 URL)
我不明白为什么。你能帮帮我吗?
我通过更改 RewritePath 修复了它:
from RewritePath=/public/breeds/(?/?.), /v1/public/breeds/${segment}
到 RewritePath=/(?/?.), /v1/${segment}
我有一个 Spring 具有此映射的网关微服务:
- id: advertisementService4
uri: lb://advertisementService
predicates:
- Path=/public/breeds/**
filters:
- RewritePath=/public/breeds/(?<segment>/?.*), /v1/public/breeds/$\{segment}
如果我用 Postman 调用此 url: http://192.168.99.1:8050/public/breeds/500,gateWay 服务会解析映射并以正确的方式构建新的 url(到 /v1/public/breeds/500):
但是如果我调用此 url http://192.168.99.1:8050/public/breeds?petType=Dog,gateWay 服务会选择正确的映射,但它会以错误的方式构建 url:
gateWay 服务构建 http://7a32a826ec7a:8070/public/breeds?petType=Dog 而不是 http://7a32a826ec7a:8070/v1/public/breeds?petType=Dog(带有 v1 在 URL)
我不明白为什么。你能帮帮我吗?
我通过更改 RewritePath 修复了它:
from RewritePath=/public/breeds/(?/?.), /v1/public/breeds/${segment}
到 RewritePath=/(?/?.), /v1/${segment}