私のアプリでは、netflix zuul
を使用して、マイクロサービス(ゲートウェイ)から別のリクエストにリクエストをルーティングしています。要求はうまくルーティングされていますが、適切なマイクロサービスにルーティングされる前に、要求本体にいくつかのパラメータを導入したいと考えています。これのために私はこのようなZuul preフィルタを使用しています。今私は大文字に身体を変更しようとしていますが、この要求がルーティングされているmicroserviceが変更体(大文字)を受信しないためにZuulプリフィルタのリクエストボディを変更できない
public class SimpleFilter extends ZuulFilter {
private static Logger log = LoggerFactory.getLogger(SimpleFilter.class);
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
try {
RequestContext context = RequestContext.getCurrentContext();
InputStream in = (InputStream) context.get("requestEntity");
if (in == null) {
in = context.getRequest().getInputStream();
}
String body = StreamUtils.copyToString(in, Charset.forName("UTF-8"));
// body = "request body modified via set('requestEntity'): "+ body;
body = body.toUpperCase();
context.set("requestEntity", new ByteArrayInputStream(body.getBytes("UTF-8")));
} catch (IOException e) {
log.error(e.getMessage(), e);
}
return null;
}
}
。代わりに元のものを受け取ります。私は間違ったことをしていますか?どんな助けもありがとう。ありがとう!!
SimpleFilterという名前のBeanがありますか? – Laurynas
ちょっと@Laurynasはい私はそのような豆を持っています。そして、私はデバッグを行い、requestEntityが変更されていることを確認し、上記の手順の後に新しいボディを含むコンテキストを含んでいます。しかし、要求がルーティングされるサービスには前の本体、すなわち小文字 – varunkr