복붙노트

[SPRING] Spring MVP의 RequestParam 값은 대 / 소문자를 구분하지 않습니다.

SPRING

Spring MVP의 RequestParam 값은 대 / 소문자를 구분하지 않습니다.

쿼리 문자열을 사용하여 JSP에서 컨트롤러로 데이터를 보냅니다.

내 컨트롤러는 주석으로 구동됩니다.

요청 매개 변수의 값은 대소.자를 구분하지 않아야합니다.

환영 페이지에 사용하는 방법은 다음과 같습니다.

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

요청 매개 변수 "orgID"는 대소 문자를 구분하지 않아야합니다. 이 작업을 수행하는 방법?

쿼리 문자열을 "orgid"또는 "orgId"로 지정할 수 있어야합니다. 매개 변수는 대소 문자를 구분하지 않아야합니다. 당신의 도움 친구들을 찾고 있습니다.

미리 감사드립니다 :-)

해결법

  1. ==============================

    1.간단한 해결 방법이 있습니다. HttpServletRequest에서 직접 작동하고 getParameter () 메서드를 사용하여 모든 매개 변수 버전을 확인할 수 있습니다.

    간단한 해결 방법이 있습니다. 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
    }
    
  2. ==============================

    2.당신은 당신의 URL과 일치하는 전쟁 봄을 바꾸어 봐야 할 것입니다. 당신은 Spring에 전달하기 전에 매개 변수를 소문자로 만드는 필터 (아마도 DelegatingFilterProxyBean)를 만들거나 경로가 일치하는 방식을 변경하려고 할 수 있습니다.

    당신은 당신의 URL과 일치하는 전쟁 봄을 바꾸어 봐야 할 것입니다. 당신은 Spring에 전달하기 전에 매개 변수를 소문자로 만드는 필터 (아마도 DelegatingFilterProxyBean)를 만들거나 경로가 일치하는 방식을 변경하려고 할 수 있습니다.

    두 번째 옵션에 대한 설명은 Spring MVC에서 주석이 달린 매핑을 사용하여 대소 문자를 구분하지 않는 URL을 어떻게 처리 할 수 ​​있습니까?에서 제공됩니다.

  3. ==============================

    3.또 다른 접근법은 두 개의 매개 변수 "orgId"와 "orgid"를 가지며 옵션을가집니다.

    또 다른 접근법은 두 개의 매개 변수 "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. ==============================

    4.Spring이 이것을 지원하는 것은 좋을지 모르지만 공급자와 소비자 간의 인터페이스 계약이 약화 될 수 있기 때문에 왜 그렇게하지 않았는지 이해할 수 있습니다. 한편, 대소 문자에 관계없이 매개 변수 이름을 사용하여 첫 번째 값을 가져 오는 방법은 매우 간단합니다.

    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)
                }
            }
        }
    
  5. ==============================

    5.봄 4.2 이상

    봄 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;
        }
    
    }
    
  6. ==============================

    6.내가 찾은 가장 간단한 방법은 단일 키 값 쌍을 매개 변수로 사용하여 키를 소문자로 변환하는 컨트롤러 메서드를 변경하는 것이 었습니다.

    내가 찾은 가장 간단한 방법은 단일 키 값 쌍을 매개 변수로 사용하여 키를 소문자로 변환하는 컨트롤러 메서드를 변경하는 것이 었습니다.

    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
    }
    
  7. from https://stackoverflow.com/questions/8922371/requestparam-value-in-spring-mvc-to-be-case-insensitive by cc-by-sa and MIT license