Значение RequestParam в spring MVC должно быть нечувствительным к регистру
Я отправляю данные из JSP в контроллер с помощью строки запроса.
мой контроллер управляется аннотацией.
значение параметра запроса должен быть нечувствительным к регистру.
метод, который я использую для добро пожаловать страницы
public String welcome(@RequestParam("orgID") String orgID, ModelMap model)
параметр запроса "orgID"должен быть нечувствительным к регистру. Как это сделать ?.
Я должен иметь возможность дать строку запроса как "orgid"или " orgId". Параметр должен быть полностью без учета регистра. Ищу ваших друзей помощи.
заранее спасибо :-)
6 ответов
существует простой обходной путь.Вы можете работать непосредственно с 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
}
вам нужно будет попробовать изменить весеннюю войну, соответствующую вашим URL-адресам . Вы можете, например, создать фильтр (возможно, DelegatingFilterProxyBean), чтобы уменьшить регистр вашего параметра, прежде чем передавать его Spring или пытаться изменить способ сопоставления путей .
объяснение второго варианта дается в как я могу иметь нечувствительные к регистру URL-адреса в Spring MVC с аннотированными сопоставлениями .
другим подходом было бы иметь два параметра "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 и следовать ему как на стороне клиента, так и на стороне сервера.
весной 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;
}
}
было бы неплохо для 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)
}
}
}
самым простым способом, который я нашел, было изменить метод контроллера, чтобы взять карту с одной парой значений ключа в качестве параметра, а затем преобразовать ключ в нижний регистр.
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
}