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

1 SpringMVC的数据绑定流程

  • SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象。
  • DataBinder调用装配在SpringMVC上下文中ConversionService组件进行数据类型转换、数据格式化工作。将Servlet中的请求信息填充到入参对象中。
  • 调用Validator组件对已经绑定了请求信息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象。
  • SpringMVC抽取BindingResult中的入参对象和校验错误对象,将它们赋给处理方法的响应入参。
  • SpringMVC通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的入参中。数据绑定的核心部件是DataBinder,运行机制如下:

2 数据转换

  • SpringMVC上下文中内建了很多转换器,可以完成大多数Java类型的转换工作。

2.1 自定义类型转换器

  • ConversionService是Spring类型转换体系的核心接口。
  • 可以利用ConversionServiceFactoryBean在Spring的IOC容器中定义一个ConversionService。Spring将自动识别出IOC容器中的ConversionService,并在Bean属性配置及SpringMVC处理方法入参绑定等场合使用它进行数据的转换。
  • 可以通过ConversionServiceFactoryBean的converters属性注册自定义的类型转换器。
  • 示例:
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<a href="${pageContext.request.contextPath}/test?user=adc,123456,1">增加数据</a>

</body>
</html>
  • User.java
package com.sunxiaping.springmvc.domain;

import java.io.Serializable;

public class User implements Serializable {
    private String username;
    private String password;
    private Integer age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
  • UserConverter.java
package com.sunxiaping.springmvc.converters;

import com.sunxiaping.springmvc.domain.User;
import org.springframework.core.convert.converter.Converter;

public class UserConverter implements Converter<String, User> {
    @Override
    public User convert(String s) {
        if (null == s || s.length() == 0) {
            return null;
        }
        String[] split = s.split(",");

        User user = new User();
        user.setUsername(split[0]);
        user.setPassword(split[1]);
        user.setAge(Integer.parseInt(split[2]));

        return user;
    }
}
  • UserController.java
package com.sunxiaping.springmvc.controller;

import com.sunxiaping.springmvc.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UserController {

    @RequestMapping(value = "/test")
    public String test(User user){

        System.out.println(user);

        return "success";
    }

}
  • SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd ">

    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.sunxiaping.springmvc"></context:component-scan>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.sunxiaping.springmvc.converters.UserConverter"></bean>
            </set>
        </property>
    </bean>

    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

</beans>
  • success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
成功啦 <br/>

</body>
</html>

2.2 关于<mvc:annotation-drivern>

  • <mvc:annotation-drivern>会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver三个Bean。
  • 还将提供以下的支持:
    • 支持使用ConversionService实例对表单参数进行转换。
    • 支持使用@NumberFormat注解和@DateTimeFormat注解完成数据格式化。
    • 支持使用@Valid注解对JavaBean实例进行JSR303验证。
    • 支持使用@RequestBody和@Res婆娘色Body注解。 

2.3 @InitBinder注解

  • 由@InitBinder标识的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单字段到JavaBean属性的绑定。
  • @InitBinder方法不能由返回值,它必须声明为void。
  • @InitBinder方法的参数通过是WebDataBinder。
  • 示例:
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
    webDataBinder.setDisallowedFields("roleIds");
}

3 数据格式化

原文地址:https://www.cnblogs.com/xuweiweiwoaini/p/11854569.html

时间: 2024-08-08 14:40:31

SpringMVC的数据转换&&数据格式化&&数据校验的相关文章

Spring MVC(三) 数据转换、格式化、校验

数据转换.格式化.校验 数据绑定机理 数据类型转换 低版本的Spring 只支持标准的PropertyEditor类型体系,不过PropertyEditor存在以下缺陷: 只能用于字符串和Java对象的转换,不适用于任意两个Java类型之间的转换: 对源对象及目标对象所在的上下文信息(如注解.所在宿主类的结构等)不敏感,在类型转换时不能利用这些上下文信息实施高级转换逻辑.有鉴于此,Spring 3.0在核心模型中添加了一个通用的类型转换模块,ConversionService是Spring类型转

SpringMVC 数据转换 &amp; 数据格式化 &amp; 数据校验

数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet 中的请求信息填充到入参对象中3. 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定

SpringMVC——数据转换 &amp; 数据格式化 &amp; 数据校验

一.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方 法的入参实例传递给 WebDataBinderFactory 实例,以创 建 DataBinder 实例对象 2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式 化工作.将 Servlet 中的请求信息填充到入参对象中 3. 调用 Validator 组件对已经绑定了请求消息的入参对象 进行数据合法性校验,并

SpringMVC的数据转换、格式化和数据校验

SpringMVC会根据请求方法签名不同,将请求信息中的信息以一定的方式转换并绑定到请求方法的参数中.在请求消息到达真正调用处理方法的这一段时间内,SpringMVC还会完成很多其他的工作,包括请求信息转换.数据转换.数据格式化以及数据校验等. 一.数据绑定 数据绑定的核心部件是DataBinder,SpringMVC框架将ServletRequest对象及处理方法的参数对象实例传递给DataBinder,DataBinder调用装配在SpringWeb上下文中的ConversionServic

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

数据绑定流程如下: 1.springmvc主框架将servletRequest对象及目标方法的实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象 2.DataBinder调用装配在spring mvc上下文中的ConversionService组件进行数据类型转换,格式化工作,将servlet中的请求信息填充到入参对象中 3.调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象 4.s

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat

作者:ssslinppp       1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC-8]SpringMVC之类型转换Converter>(对应链接: http://www.cnblogs.com/ssslinppp/p/4598102.html ) 中讲解了Spring MVC的类型转换,在此回顾下. 数据格式化,从本质上讲属于数据转换的范畴.Spring就是基于数据转换框架植入&q

SpringMVC数据格式化,介绍了解一下

7.3.数据格式化在如Web /客户端项目中,通常需要将数据转换为具有某种格式的字符串进行展示,因此上节我们学习的数据类型转换系统核心作用不是完成这个需求,因此Spring3引入了格式化转换器(Formatter SPI) 和格式化服务API(FormattingConversionService)从而支持这种需求.在Spring中它和PropertyEditor功能类似,可以替代PropertyEditor来进行对象的解析和格式化,而且支持细粒度的字段级别的格式化/解析. Formatter

SpringMVC中controller接收Json数据

SpringMVC中controller接收Json数据 1.jsp页面发送ajax的post请求: function postJson(){ var json = {"username" : "imp", "password" : "123456"}; $.ajax({ type : "post", url : "<%=basePath %>ajaxRequest", co