数据转换&数据格式化&数据校验

Posted bigdatalearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据转换&数据格式化&数据校验相关的知识,希望对你有一定的参考价值。

1.数据绑定流程
① Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 
② DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中 
③调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象 
④Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参

图解:
技术图片

2.自定义类型转换器
步骤如下:
① 实现Converter<S,T>接口:将S类型对象转换成T类型对象
public class TestCon implements Converter<String, Employee> {
    @Override
    public Employee convert(String s) {
        if(s != null){
            String[] vals = s.split("-");

            if(vals != null & vals.length == 4){

                String lastName = vals[0];
                String email = vals[1];
                Integer gender = Integer.parseInt(vals[2]);
                Department department = new Department();
                department.setId(Integer.parseInt(vals[3]));

                Employee employee = new Employee(null,lastName,email,gender,department);
                return employee;
            }
        }
        return null;
    }
}
②在SpringMVC配置文件中配置转换器
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="testCon"/>
            </set>
        </property>
    </bean>
③将自定义的ConversionService注册到Spring MVC的上下文中
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
3.<mvc:annotation-driven />
<mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping RequestMappingHandlerAdapter ExceptionHandlerExceptionResolver  三个bean。 
还将提供以下支持:支持使用 ConversionService 实例对表单参数进行类型转换
支持使用 @NumberFormat annotation、@DateTimeFormat  注解完成数据类型的格式化 
支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
支持使用 @RequestBody 和 @ResponseBody 注解
技术图片
从图中就能说明重要性
@InitBinder
由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。
WebDataBinder 是 DataBinder 的子类,用 于完成由表单字段到 JavaBean 属性的绑定 @InitBinder方法不能有返回值,它必须声明为void。
@InitBinder方法的参数通常是是 WebDataBinder
4.数据格式化使用步骤   ------------------------>主要针对数字类型、日期类型  比如
技术图片
①在对应的bean对象中的属性上方加上注解就可以了    ------------------------------->就一步
原理:Spring在格式化模块中定义一个实现ConversionService接口的FormattingConversionService实现类,该类扩展了GenericConverisonService,因此它既具有类型转换的功能,又
具有格式化的功能FormattingConversionService拥有FormattingConversionServiceFactotyBean工厂类,从而可以在Spring配置文件中注册构造FormattingConversionService。
所以转换器一般就直接配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
5.JSR303  数据校验
JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 . 
JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max  等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验
技术图片
步骤如下:
①加入jar包
②在需要数据校验的部分添加如下注解
技术图片
③处理器部分,入参添加@valid注解
@RequestMapping(value = "/emp",method = RequestMethod.POST)
    public String save(@Valid Employee employee, BindingResult result,Map<String,Object> map){

        if(result.getErrorCount() > 0){

            System.out.println("出错了");
            for(FieldError error:result.getFieldErrors()){
                System.out.println( error.getField() + ":" + error.getDefaultMessage());
            }

            //若验证出错则转向定制页面
            map.put("departments", departmentDao.getDepartments());
            return "input";
        }
        employeeDao.save(employee);
        return "redirect:/emps";
    }










以上是关于数据转换&数据格式化&数据校验的主要内容,如果未能解决你的问题,请参考以下文章

数据转换&数据格式化&数据校验

SpringMVC——类型转换和格式化数据校验客户端显示错误消息

使用Python爬取分析腾讯新冠疫情数据,并对json格式进行校验

JavaScript脚本语言实现表单数据校验

SpringMVC框架整理

[工具]JSON校验转换在线工具