需要がゲートウェイ層でのパラメータの一部を置き換えるために行われる必要があるとして、ここだけGETリクエストのために、以下のようにして、何を記録
輸入com.netflix.zuul.ZuulFilter。 輸入com.netflix.zuul.context.RequestContext; 輸入org.apache.commons.lang3.StringUtils。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.cloud.netflix.zuul.filters.support.FilterConstants。 輸入org.springframework.stereotype.Component。 インポートのjavax.servlet.http.HttpServletRequest; 輸入java.util.HashMapを; 輸入java.util.LinkedList; 輸入はjava.util.List; 輸入java.util.Map; / ** *过滤参数 * * @author * 2019年5月17日10時01分 * / @Component パブリッククラスParametersFilterはZuulFilter {延び プライベート静的最終ロガーロガー= LoggerFactory.getLogger(ParametersFilter.class)を、 プライベート静的最終文字列KEY =「PARAMETER_FILTER_KEY」。 @Override パブリック文字列のfilterType(){ FilterConstants.PRE_TYPEを返します。 } @Override 公共INT filterOrder(){ リターン9。 } @Override パブリックブールshouldFilter(){ trueを返します。 } @Override パブリックオブジェクトラン(){ //获取到要求 RequestContextのCTX = RequestContext.getCurrentContext()。 要求= ctx.getRequestたHttpServletRequest(); 試み{ //ノックダウン場合 // TODO //複数の変換を再試行エラーを防ぐ ブールisConver =(ブール)request.getAttribute(KEY); IFを(!= NULL && isConver isConver){ ヌルリターン; } 文字列方法request.getMethod =(); logger.info( "置換法を要求する} {、URL = {}"、方法、Request.getRequestURI()); // GETメソッド であれば( "GET" .equals(method.toUpperCase())){ //取得パラメータ マップ<文字列、文字列[]>なparameterMap = request.getParameterMap()。 IF(なparameterMap == NULL){ ヌルを返します。 } //替换、业务逻辑 地図<文字列、リストの<string >> requestQueryParams = ctx.getRequestQueryParams(); IF(requestQueryParams == NULL){ requestQueryParams =新規HashMapの<>(parameterMap.size()* 2)。 } (文字列キー:parameterMap.keySet())のための{ 文字列[]の値= parameterMap.get(キー)。 一覧<文字列> VALUELIST =新しいLinkedListは<>(); (String値:値)のための{ valueList.add(変化(値))。 } requestQueryParams.put(キー、値リスト); } //書き込みパラメータ ctx.setRequestQueryParams(requestQueryParams); logger.info( "完全な翻訳、URL = {}"、Request.getRequestURI()); } }キャッチ(例外E ){ LOGGER.error( "パラメータ置換例外:{}"、E); } {最後に trueにrequest.setAttribute(KEY); } 戻りNULL; } / ** *交換 * * @paramデータデータ * @return変換データの後に * / プライベートの変更文字列(Stringデータ){ // TODO データを返します。 } }