欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC - 类型转换 - 数据格式化 -数据校验

程序员文章站 2024-03-24 17:23:28
...

类型转换

ConversionService 是 Spring 类型转换体系的核心接口。
• 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC 容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换
• 可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器

spring自带一些常见的类型转换器

1.编写自定义类型转换器(实现Converter接口)

import org.springframework.core.convert.converter.Converter;
public class MyConverter implements Converter<String,Person>{
    @Override
    public Person convert(String source) {
        //接收前端传来的String 并转为 自定义类型
        return new person(source);
    }

2.将MyConverter加入到springmvc中

    <!-- 1.将自定义转换器纳入SpringIOC中 -->
    <bean id = "myConverter" class = "converter.MyConverter"></bean>
    <!-- 2.将myConverter在纳入springMVC 提供的转换器bean中-->
    <bean id = "conversionService" class = "org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean = "myConverter"/>
            </set>
        </property>
    </bean>
    <!--3.将conversionService注册到annotation-driver  -->
    <mvc:annotation-driven conversion-service = "conversionService"></mvc:annotation-driven>
    

3.使用转换器

@RequestMapping("xxx")
public String converter(@RequestParam("upersoninfoString") person person)//前端传入的使String,接收的使person类型的参数,类型自动转换
......
}

@RequestParam 是触发转换器的桥梁,接收的数据是前端传来的String 但是需要将数据 赋给 目标的对象的类型为Person

关于 mvc:annotation-driven

• <mvc:annotation-driven /> 会自动注 册RequestMappingHandlerMapping、RequestMappingHandlerAdapter 与ExceptionHandlerExceptionResolver 三个bean。
• 还将提供以下支持:
– 支持使用 ConversionService 实例对表单参数进行类型转换
– 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成数据类型的格式化
– 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
– 支持使用 @RequestBody 和 @ResponseBody 注解

数据格式化

• 对属性对象的输入/输出进行格式化,从其本质上讲依然属于 “类型转换” 的范畴。

• Spring 在格式化模块中定义了一个实现ConversionService 接口的FormattingConversionService 实现类,该实现类扩展 了 GenericConversionService,因此它既具有类型转换的功能,又具有格式化的功能

• FormattingConversionService 拥有一个FormattingConversionServiceFactroyBean 工厂类,后者用于在 Spring 上下文中构造前者数据格式化

• FormattingConversionServiceFactroyBean 内部已经注册了 :
– NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用 @NumberFormat 注解
– JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用 @DateTimeFormat 注解

• 装配了 FormattingConversionServiceFactroyBean 后,就可以在 Spring MVC 入参绑定及模型数据输出时使用注解驱动了。
<mvc:annotation-driven/> 默认创建的ConversionService 实例即为
FormattingConversionServiceFactroyBean
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”)
SpringMVC提供了很多注解,方便我们数据格式化

实现步骤:
1.配置

<!-- 配置数据格式化 注解所依赖的bean -->
    <bean id = "conversionServiceFactory" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>

2.通过注解使用

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date brithday;//2019.10.20

tip:
ConversionServiceFactoryBean
FormattingConversionServiceFactoryBean

FormattingConversionServiceFactoryBean中包含ConversionServiceFactoryBean如果要配置类型转换器和数据格式化,只要配FormattingConversionServiceFactoryBean即可,将需要的参数放入其中
    <bean id = "conversionService" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="converters">
            <set>
                <ref bean = "myConverter"/>
            </set>
        </property>
    </bean>

@DateTimeFormat 注解可对java.util.Date、java.util.Calendar、java.long.Long 时间
类型进行标注
@NumberFormat 可对类似数字类型的属性进行标 注,它拥有两个互斥的属性:
– style:类型为 NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、
Style.CURRENCY(货币类型)、 Style.PERCENT(百分数类型)
– pattern:类型为 String,自定义样式,如patter="#,###";

错误消息

public String testDataFormat(Person person, BindingResult result, Map<String,Object> map)需要验证的数据是person中的Date,SpringMVC要求 如果校验失败,则将错误信息自动放入该对象之后紧接着的BindingResult中 即person 与 BindingResult之间不能有其他参数

如果需要在jsp中显示错误信息,则可以把错误信息放入request域中

数据校验

• JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 .
• JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证
SpringMVC - 类型转换 - 数据格式化 -数据校验
Hibernate validator 提供额外注解
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

SpringMVC - 类型转换 - 数据格式化 -数据校验
• <mvc:annotation-driven/ >会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标 注@valid 注解即可让 Spring MVC 在完成数据绑定后执行数据校验的工作

• 在已经标注了 JSR303 注解的表单/命令对象前标注一个@Valid,Spring MVC 框架在将请求参数绑定到该入参对象后,就会调用校验框架根据注解声明的校验规则实施校验

• Spring MVC 是通过对处理方法签名的规约来保存校验结果的:
前一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是 BindingResult 或Errors 类型,这两个类都位于org.springframework.validation 包中

需校验的 Bean 对象和其绑定结果对象或错误对象时成对出现的,它们 之间不允许声明其他的入参
• Errors 接口提供了获取错误信息的方法,如 getErrorCount() 或getFieldErrors(String field)
• BindingResult 扩展了 Errors 接口

在表单/命令对象类的属性中标注校验注解,在处理方法对 应的入参前添加 @Valid,Spring MVC 就会实施校验并将校验结果保存在被校验入参对象之后的 BindingResult 或Errors 入参中。

使用
1.jar
hibernate-validator.jar
classmate.jar
jboss-logging.jar
validation-api.jar
hibernate-validator-annotation-processor.jar

2.配置
<mvc:annotation-driven></mvc:annotation-driven>

3.使用注解

1.需要校验的属性加@注解(实体类)
2.在需要检验的方法参数对象前加@valid

上一篇: Maven配置教程

下一篇: