如果在使用@RequestParam时需要自定义转换器,我应该使用什么?

时间:2010-10-21 16:08:48

标签: java spring spring-mvc

我是否有如下方法签名

public void deposit(@RequestParam("accountId") Integer accountId, 
                    @RequestParam("amount") BigDecimal amount) {...}

因为我有一个特定于区域设置的十进制值需要转换为BigDecimal ,是否有一些注释允许我设置传入的数据,如@Decimal(“###。 ###,##“)或其他什么???

2 个答案:

答案 0 :(得分:4)

Spring 3有@NumberFormat注释:

public void deposit(@RequestParam("accountId") Integer accountId,  
    @RequestParam("amount") @NumberFormat(pattern = "###.###,##") BigDecimal amount) 
{...} 

您需要<mvc:annotation-driven>才能启用它。

另见:

答案 1 :(得分:2)

更一般地说,您可以使用ConversionServiceFactoryBean注册自定义转换器。完成后,您需要add a custom web binding initializer到处理程序适配器

示例配置:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
      <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
          <property name="conversionService" ref="conversionService"/>
      </bean>
    </property>
</bean>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <ref bean="myCustomConverter"/>
        </list>
    </property>
</bean>