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

数据绑定流程如下:

1.springmvc主框架将servletRequest对象及目标方法的实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象

2.DataBinder调用装配在spring mvc上下文中的ConversionService组件进行数据类型转换,格式化工作,将servlet中的请求信息填充到入参对象中

3.调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象

4.spring mvc 抽取BindingResult中的入参对象和校验错误对象,将他们赋给处理方法的响应入参

springmvc--数据转换&数据格式化&数据校验_第1张图片

 

一.数据转换

1.springmvc 会按请求参数的属性名和POJO的属性名,进行自动匹配。支持级联属性。

2.自定义转换器

    2.1自定义转换器实现Converter<S,T>

@Component
public class EmployeeConverter implements Converter<String, Employee> {

    @Override
    public Employee convert(String source) {
        System.out.println("EmployeeConverter..");
        if(source != null){
            String[] args = source.split(",");
            Integer id = Integer.parseInt(args[0]);
            String username = args[1];
            String email = args[2];
            Employee employee = new Employee(id, username, email);
            System.out.println(source+"----convert----"+employee);
            return employee;
        }
        return null;
    }  
}

     2.2 在springmvc的配置文件中,配置如下

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters" ref="employeeConverter"></property> </bean>

 

二.数据格式化

将前台的输入数据都是通过String类型传给后台的,如果entity的属性是基本类型,那么是可以正常转换的,

但是如果某些属性是java.util.Date或者是float,则不知道按什么何种格式来转换,这个是则需要如下注解标记,告诉服务器按什么格式来转换

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

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

当前台输入的数据不满足以上格式的时候,其转换结果可以在目标方法的方法参数中,注入BindingResult result来获取,示例如下

@RequestMapping(value="testConverter",method={RequestMethod.POST})
    public String testConverter(Employee employee, BindingResult result){
        System.out.println("SpringmvcTest.testConverter");
        if(result.getErrorCount() > 0){
            List<FieldError> fieldErrors = result.getFieldErrors();
            for(FieldError error : fieldErrors){
                System.out.println(error.getField() + ":" + error.getDefaultMessage());
            }
        }
        System.out.println(employee);
        return "success";
    }

 

三.数据校验

JSR303是一个JAVA BEAN校验的规范,但是springmvc 没有对其进行实现,hibernate validator对齐进行了实现。

具体流程如下:

1.加入 hibernate validator 的jar包

2.在对应需要验证的bean上就注解

3.后台的到错误消息,BindingResult

4.前台得到错误消息,<form:errors path="属性名"></form:errors>

5.如何定制消息,

在springmvc的配置文件中中配置

<bean class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="i18n"></property>
</bean>

src下面添加i18n.properties属性文件,键值对如何写(验证用的注解.entity名.属性名=消息)

注意事项,

springmvc的配置文件中,必须已经配置了

<mvc:annotation-driven ></mvc:annotation-driven>

还有就是目标方法的验证对象前面加@Valid,才会验证

 

你可能感兴趣的:(springmvc--数据转换&数据格式化&数据校验)