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

类型转换

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 进行验证
在这里插入图片描述
Hibernate validator 提供额外注解
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

在这里插入图片描述
• <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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值