SpringMVC学习笔记——数据格式化

问题

对于一些数据,我们从前端获取的都是字符串,那么该如何转换成相对应的格式呢?
比如日期Data、金钱(#,###,###.#)这样的数据格式化。

解决

对于格式化问题,上一个学习笔记中提到,springmvc.xml中添加了<mvc:annotation-driven/>后是支持@DateTimeFormat@NumberFormat的。从名字上来看,这两个注解就是为了格式化。
在实体类中,对应的格式化成员变量上增加注解,示例如下:

    @DateTimeFormat(pattern = "yyyy-mm-dd")
    private Date birth;

    @NumberFormat(pattern = "#,###,###.#")
    private Float salary;

这样,我们就可以按照这样的格式,从字符串格式化成我们所需要的形式。

注意点

(1)如果数据格式化失败,那么失败信息将会存放在BindingResult中,具体参考数据转换那个笔记的图。拿到数据绑定结果,我们可以从中获取一些需要的信息(比如格式化失败),示例代码如下:

    @RequestMapping(value = "/emp", method = RequestMethod.POST)
    public String save(Employee employee, BindingResult result) {
        System.out.println("save :" + employee);

        if (result.getErrorCount() > 0) {
            System.out.println("出错了!");
            for (FieldError error : result.getFieldErrors()) {
                System.out.println(error.getField() + ":" + error.getDefaultMessage());
            }
        }
        employeeDao.save(employee);
        return "redirect:/emps";
    }

在save方法中增加一个入参BindingResult,SpringMVC会帮我们绑定这个参数,我们可以从这个参数中获取错误信息。
(2)我们曾经自己编写了数据转换器,当时它的class是基于org.springframework.context.support.ConversionServiceFactoryBean的,进行了属性值converters的设置,把我们的自定义数据转换器放进去。这个class是不支持数据格式化的,因为数据转换和数据格式化是同时进行的,所以使用这个class会造成异常。我们可以更换成org.springframework.format.support.FormattingConversionServiceFactoryBean
示例如下:

    <!-- 只配置上面,不配置下面,将会造成@RequestMapping不好用 -->
    <!-- <mvc:annotation-driven /> -->
    <mvc:annotation-driven
        conversion-service="conversionService"></mvc:annotation-driven>

    <!-- 配置 ConversionService -->
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="employeeConverter" />
            </set>
        </property>
    </bean>

这样,我们既可以配置自定义的数据转换器,也可以进行数据格式化,查看该class,也可以配置自定义的数据格式化器。

猜你喜欢

转载自blog.csdn.net/u012525096/article/details/81414507