Параметр HttpServletRequest в нижнем регистре - PullRequest
2 голосов
/ 23 января 2012

После следования значения RequestParam в пружине MVC, чтобы быть нечувствительным к регистру , я добавил параметр HttpServletRequest в свой метод.Но я добавил почти 20 условий IF, чтобы иметь полный URL-адрес без учета регистра.

Я знаю, что это совершенно болезненный и уродливый способ кодирования.Я прошу кого-нибудь дать изумительное решение этого вопроса.

Мне нужен параметр запроса без учета регистра.Отправляемый параметр запроса - orgID.Этот параметр будет приходить по-разному.скажем Orgid, oRgid, orGid, orgID ....... и т. д.

Я не могу сделать это напрямую как request.getParamter ("orgID").Для этого я добавляю много условий.:-( как я уже сказал, совершенно безобразное кодирование.

Ответы [ 6 ]

2 голосов
/ 23 января 2012

Несмотря на то, что это неправильное представление (в других случаях не очень удобно получать параметры), работает следующий фрагмент кода:

String getCaseInsensitiveParameter(HttpServletRequest request){
Map params = request.getParameterMap();
    Iterator i = params.keySet().iterator();
    while ( i.hasNext() )
      {
        String key = (String) i.next();
        String value = ((String[]) params.get( key ))[ 0 ];
        if ("orgid".equals(key.toLowerCase()) {
            return value;
        }
      }
return null;
}
2 голосов
/ 23 января 2012
private String getCaseInsensitiveOrgIdParameter(HttpServletRequest request) {
    for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
        String paramName = entry.getKey();
        if ("orgid".equals(paramName.toLowerCase()) {
            return entry.getValue()[0];
        }
    }
    return null;
}

Но я по-прежнему придерживаюсь своей позиции: другие приложения, отправляющие этот параметр, должны быть исправлены.Если параметр orgId, они должны отправить orgId.Не orGid или что-то еще.Если они достаточно ленивы (или глупы) для отправки orGid вместо orgId, ничто не гарантирует, что они не отправят ogrId.Что ты будешь делать тогда?

1 голос
/ 23 января 2012

У вас может быть перехватчик обработчика Spring MVC ( org.springframework.web.servlet Интерфейс HandlerInterceptor ), который принимает имя параметра и «конвертирует» его в стандартизированное имя.

Что-тонапример: если имя параметра в запросе заканчивается на «id», независимо от того, в каком случае (кроме точно «Id»), чем он принимает параметр, скопируйте его и добавьте его под именем «xxxId».

Тогда вам нужно будет только проверить для нормализованной формы fin метод запроса.

@ Смотрите: для быстрого ознакомления с перехватчиком Handler: этот блог ( обратите внимание на самый последний кодблок - идея для улучшения, он не работает )

0 голосов
/ 29 ноября 2017

Если у вас есть доступ к Java 8:

request.getParameterMap().stream()
    .collect(Collectors.toMap(e -> e.getKey().toLowerCase(), e.getValue()))
    .get("orgID");
0 голосов
/ 11 января 2016

Мое решение: просто создайте новый объект карты параметров и заполните его клавишами в нижнем регистре. Затем используйте эту карту параметров вместо оригинального объекта. Тогда вы можете попросить ключ в нижнем регистре. Я сделал это так (используя класс PageParameters Apache Wicket):

Map paramsOriginal = request.getParameterMap();
PageParameters paramsNew = new PageParameters();
Iterator<String> i = paramsOriginal.keySet().iterator();
while(i.hasNext()) {
    String key = (String) i.next();
    String value = ((String[]) paramsOriginal.get(key))[0];
    //lowercase the key
    paramsNew.put(key.toLowerCase(), value);
}

//request the value of a lowercased key
String orgid = paramsNew.getString("orgid");
0 голосов
/ 02 декабря 2013

Вы должны использовать метод equalsIgnoreCase:

public String getRequestParameter(HttpServletRequest request, String parameter){
    for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
        if(entry.getKey().equalsIgnoreCase(parameter)){
            return entry.getValue()[0];
        }
    }
    return null;
}

или если у вас есть запрос в качестве переменной экземпляра:

public String getRequestParameter(String parameter){
    for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
        if(entry.getKey().equalsIgnoreCase(parameter)){
            return entry.getValue()[0];
        }
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...