可以弹簧mvc修剪从表格中获得的所有琴弦吗?

spring spring-mvc

17642 观看

6回复

2260 作者的声誉

我知道struts2默认配置会修剪从表单中获取的所有字符串。

例如:

我打字

“ 随你 ”
在表格和提交,我会得到
“随你”
该字符串已被自动修剪

spring mvc也有这个功能吗?谢谢。

作者: Gordian Yuan 的来源 发布者: 2010 年 4 月 22 日

回应 (6)


2

27648 作者的声誉

您可以使用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"/>
}

或者使用Servlet过滤器

作者: Arthur Ronald 发布者: 22.04.2010 09:06

11

2145 作者的声誉

注册此属性编辑器: 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>
作者: Lonre Wang 发布者: 04.07.2011 07:14

38

4909 作者的声誉

决定

使用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所要求的那样 - 它也适用于密码,因为在服务器端,输入[type = password]和输入[type = text]之间没有区别

作者: Janning 发布者: 18.10.2012 12:00

4

3341 作者的声誉

您还可以使用Spring的转换服务,它具有<mvc:annotation-driven/>与Spring Webflow 一起使用的额外好处。与其他答案一样,主要缺点是这是全局变化,不能对某些表格禁用。

你需要一个转换器来进行修剪

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" />
作者: Patrick 发布者: 15.02.2013 11:14

1

4052 作者的声誉

只需自定义上面的代码以适应Spring Boot,如果你想为表单中的某些字段显式修剪功能,你可以显示如下:

@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));
        }
}
作者: Sarvar Nishonboev 发布者: 28.06.2018 06:12

0

11 作者的声誉

首先,修剪requestparam是String,你可以创建一个类和implamplements WebBingdingInitializer

 @ControllerAdvice
public class CustomWebBindingInitializer implements WebBindingInitializer {

    @InitBinder
    @Override
    public void initBinder(WebDataBinder webDataBinder, WebRequest webRequest) {
        webDataBinder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }
}

请使用componentScan使此类成为Spring Bean。

但是,我不知道如何修剪requestBody JSON数据中的String值。

作者: Jaille Chen 发布者: 12.06.2019 03:16
32x32