Значение RequestParam в пружине MVC не учитывает регистр - PullRequest
8 голосов
/ 19 января 2012

Отправляю данные из JSP в контроллер, используя строку запроса.

Мой контроллер управляется аннотациями.

Значение параметра запроса должно быть без учета регистра.

Метод, который я использую для страницы приветствия:

public String welcome(@RequestParam("orgID") String orgID, ModelMap model)

Параметр запроса "orgID" должен быть без учета регистра.Как это сделать?

1011 * Я должен быть в состоянии дать строку запроса как "orgid" или "orgId".Параметр должен быть полностью нечувствительным к регистру.Ищу помощи ваших друзей.

Заранее спасибо: -)

Ответы [ 6 ]

3 голосов
/ 21 мая 2013

Другой подход заключается в том, чтобы иметь два параметра "orgId" и "orgid" и иметь необязательный параметр.

public String welcome(@RequestParam(value="orgID", required = false) String org_ID, @RequestParam(value="orgid", required=false, String orgid, ModelMap model) {
final String orgId = orgid == null ? org_ID : orgid;
...
}

Но если у вас есть контроль над параметрами, я бы настоятельно предпочел иметь один последовательный способ, скажите org-id и следуйте ему как на стороне клиента, так и на стороне сервера.

3 голосов
/ 19 января 2012

Вы должны попытаться изменить войну, которая соответствует вашим URL. Например, вы можете создать фильтр (возможно, DelegatingFilterProxyBean), чтобы прописать строчные буквы в вашем параметре, прежде чем передать его в Spring или попытаться изменить способ сопоставления путей.

Объяснение второго варианта дано в Как получить URL без учета регистра в Spring MVC с аннотированными сопоставлениями .

1 голос
/ 10 июля 2018

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

public String welcome(@RequestParam(required = true) Map<String, String> params, ModelMap model) {
   String caseInsensitiveOrgId = params.keySet().toArray()[0].toString().toLowerCase();
   String OrgValue = params.values().toArray()[0];
   // Do whatever you want here
}
1 голос
/ 05 марта 2018

весной 4.2 +

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="org.saat")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        AntPathMatcher matcher = new AntPathMatcher();
        matcher.setCaseSensitive(false);
        configurer.setPathMatcher(matcher);
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new 
InternalResourceViewResolver();
        viewResolver.setPrefix("/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

}
1 голос
/ 14 ноября 2017

Для Spring было бы неплохо поддержать это, но я также могу понять, почему они этого не делают, поскольку это может привести к ослаблению контракта на интерфейс между поставщиком и потребителем.А пока вот довольно простой способ получить первое значение, используя имя параметра независимо от его регистра.

    String myVal = null;
    for (String pname : request.getParameterMap().keySet() ) {
        if ( pname != null && pname.toLowerCase().equals("your_lc_pname") ) {
            for (String v : request.getParameterValues(pname) ) {
                // do something with your value(s)
            }
        }
    }
0 голосов
/ 19 января 2012

Существует простой обходной путь. Вы можете работать непосредственно с HttpServletRequest, использовать метод getParameter () и проверять все версии параметра.

public String welcome(HttpServletRequest request, ModelMap model){
   String orgID = extractOrgId(request);
   //rest of your code
}

private String extractOrgId(HttpServletRequest request){
   if(request.getParameter("orgId") != null){
       return request.getParameter("orgId");
   }
   // and so on
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...