数据格式化

将时间字符串转换为Date对象除了使用数据类型转换器外还可以通过数据格式化方式实现:

@DateTimeFormat注解可对java.util.Date、java.util.Calendar、java.long.Long时间类型进行标注:

        pattern 属性:类型为字符串。指定解析/格式化字段数据的模式,如:yyyy-MM-ddhh:mm:ss

        ISO属性:指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(默认值,不使用)、ISO.DATE(yyyy-MM-dd) 、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-ddhh:mm:ss.SSSZ)

        style 属性:字符串类型。通过样式指定日期时间的格式,由两位字–符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式

@NumberForma注解t可对类似数字类型的属性进行标注,它拥有两个互斥的属性:

        pattern属性:自定义样式,如patter="#,###";

        style属性:指定样式类–型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、Style.PERCENT(百分数类型)

我们在controller层要处理好格式不对的错误提示:

 

@Controller
public class UserInfoController {

    @RequestMapping("/userinfo/add.do")
   //
BindingResult中保存了类型转换及格式化相关的错误信息
   public String add(UserInfo userInfo,BindingResult result){    
        if(result.getErrorCount()>0){
            for(ObjectError error: result.getAllErrors()){
                System.out.println(error.getDefaultMessage());
            }
            return "userinfo/error";
        }
        
        return "userinfo/ok";
    }

}

接下来我们用上述两个注解给vo类对应属性添加格式:

publicclass UserInfo {

    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birth;
    @NumberFormat(pattern="#,###,###.")
    private Float salary;
    
    //...省略getter和setter方法...

}

当我们在表单页获取了上述格式数据,就会自动转换为date类和int类

比如我们输入

就会输出

这就是数据格式化注解的作用,当我们要同时使用注解和类型转换器时,我们可以使用

FormattingConversionServiceFactroyBean

使用自定义类型转换器时需要通过org.springframework.context.support.ConversionServiceFactoryBean的converters属性注册该类型转换器,此时<mvc:annotation-driven/>默认创建的ConversionService实例不再org.springframework.format.support.DefaultFormattingConversionService对象,而是org.springframework.core.convert.support.DefaultConversionService对象,无法使用@DateTimeFormat和@NumberFormat注解,为了解决这一问题需要将org.springframework.context.support.ConversionServiceFactoryBean替换成org.springframework.context.support.ConversionServiceFactoryBean,如下配置:

<beanid="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean">
    <propertyname="converters">
        <set>
            <refbean="dateConverter"/>
        </set>
    </property>
</bean>
    
<mvc:annotation-drivenconversion-service="conversionService"></mvc:annotation-driven>

 

原文地址:https://www.cnblogs.com/yimengxianzhi/p/12363691.html