복붙노트

[SPRING] 봄 mvc 양식에서 얻은 모든 문자열을 다듬을 수 있습니까?

SPRING

봄 mvc 양식에서 얻은 모든 문자열을 다듬을 수 있습니까?

Struts2 기본 설정은 양식에서 가져온 모든 문자열을 다듬을 것입니다.

예 :

양식에 "무엇이든"을 입력하고 제출하면 "무엇이든"을 얻을 것입니다. 문자열이 자동으로 다듬어졌습니다.

봄 MVC 도이 기능을 가지고 있습니까? 고마워.

해결법

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

    1.Spring 3.2 이상 사용 :

    Spring 3.2 이상 사용 :

    @ControllerAdvice
    public class ControllerSetup
    {
        @InitBinder
        public void initBinder ( WebDataBinder binder )
        {
            StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);
            binder.registerCustomEditor(String.class, stringtrimmer);
        }
    }
    

    MVC 테스트 컨텍스트로 테스트 :

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration
    public class ControllerSetupTest
    {
        @Autowired
        private WebApplicationContext   wac;
        private MockMvc                 mockMvc;
    
        @Before
        public void setup ( )
        {
            this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        }
    
        @Test
        public void stringFormatting ( ) throws Exception
        {
            MockHttpServletRequestBuilder post = post("/test");
            // this should be trimmed, but only start and end of string
            post.param("test", "     Hallo  Welt   ");
            ResultActions result = mockMvc.perform(post);
            result.andExpect(view().name("Hallo  Welt"));
        }
    
        @Configuration
        @EnableWebMvc
        static class Config
        {
            @Bean
            TestController testController ( )
            {
                return new TestController();
            }
    
            @Bean
            ControllerSetup controllerSetup ( )
            {
                return new ControllerSetup();
            }
        }
    }
    
    /**
     * we are testing trimming of strings with it.
     * 
     * @author janning
     * 
     */
    @Controller
    class TestController
    {
        @RequestMapping("/test")
        public String test ( String test )
        {
            return test;
        }
    }
    

    그리고 LppEdd가 물었 듯이, 서버 측에서는 패스워드와 마찬가지로 작동합니다. input [type = password]와 input [type = text] 사이에는 차이가 없습니다.

  2. ==============================

    2.이 속성 편집기를 등록하십시오. org.springframework.beans.propertyeditors.StringTrimmerEditor

    이 속성 편집기를 등록하십시오. org.springframework.beans.propertyeditors.StringTrimmerEditor

    AnnotionHandlerAdapter 예제 :

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
      ...
      <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
          <property name="propertyEditorRegistrar">
             <bean class="org.springframework.beans.propertyeditors.StringTrimmerEditor" />
          </property>
        </bean>
      </property>
      ...
    </bean>
    
  3. ==============================

    3.또한 및 Spring Webflow로 작업하는 이점이있는 Spring의 변환 서비스를 사용할 수 있습니다. 다른 대답과 마찬가지로 주요 단점은 이것이 글로벌 변화이며 특정 양식에 대해 비활성화 할 수 없다는 것입니다.

    또한 및 Spring Webflow로 작업하는 이점이있는 Spring의 변환 서비스를 사용할 수 있습니다. 다른 대답과 마찬가지로 주요 단점은 이것이 글로벌 변화이며 특정 양식에 대해 비활성화 할 수 없다는 것입니다.

    트리밍을하려면 변환기가 필요합니다.

    public class StringTrimmingConverter implements Converter<String, String> {
    
        @Override
        public String convert(String source) {
           return source.trim();
        }
    
    }
    

    그런 다음 변환기에 대해 알고있는 변환 서비스를 정의하십시오.

    <bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
        <list>
            <bean class="mypackage.util.StringTrimmingConverter"/>
        </list>
        </property>
    </bean>
    

    그걸 mvc에 묶어 라.

    <mvc:annotation-driven conversion-service="applicationConversionService"/>
    

    Spring Webflow를 사용한다면 래퍼가 필요하다.

     <bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService">
        <constructor-arg ref="applicationConversionService"/>
    </bean>
    

    플로우 빌더 설정

    <flow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService" development="true"  validator="validator" />
    
  4. ==============================

    4.Spring-MVC 인터셉터를 사용할 수 있습니다.

    Spring-MVC 인터셉터를 사용할 수 있습니다.

    public class TrimInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            Enumeration<String> e = request.getParameterNames();
            while(e.hasMoreElements()) {
                String parameterName = e.nextElement();
    
                request.setParameter(parameterName, request.getParameter(parameterName).trim());
            }
    
            return true;
        }
    

    HandlerMapping 인터셉터 속성을 설정합니다.

    <bean id="interceptorTrim" class="br.com.view.interceptor.TrimInterceptor"/>
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" p:interceptors-ref="interceptorTrim"/>
    }
    

    또는 서블릿 필터를 사용하십시오.

  5. ==============================

    5.스프링 부트에 맞춰서 위의 코드를 커스터마이징 한 것만으로, 폼의 일부 필드에 대해 명시 적으로 트리밍 기능을 원한다면 아래와 같이 표시 할 수 있습니다.

    스프링 부트에 맞춰서 위의 코드를 커스터마이징 한 것만으로, 폼의 일부 필드에 대해 명시 적으로 트리밍 기능을 원한다면 아래와 같이 표시 할 수 있습니다.

    @Component
    @ControllerAdvice
    public class ControllerSetup {
        @InitBinder({"dto", "newUser"})
            public void initBinder(WebDataBinder binder) {
              binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
              binder.registerCustomEditor(String.class, "userDto.username", new StringTrimmerEditor(false));
              binder.registerCustomEditor(String.class, "userDto.password", new DefaultStringEditor(false));
              binder.registerCustomEditor(String.class, "passwordConfirm", new DefaultStringEditor(false));
            }
    }
    
  6. from https://stackoverflow.com/questions/2691667/can-spring-mvc-trim-all-strings-obtained-from-forms by cc-by-sa and MIT license