我们为什么要对数据进行处理?

需求:在上个crud中我们如果需要每次修改的时候都要把时间也记录下来

解决:在jsp中新增一个input,在employee中新增一个Data字段

问题:input输出来的数据是String,而在employee中的字段是Data数据

这个时候就需要:

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

数据转换

数据校验

自定义类型处理器

jsp中发送数据

<form action="/employee" method="post">
<%--输入一个这样的数据last-name-email-gender-department-department.id:
我们就能获取到实例化的employee--%>
Employee:<input type="text" name="employee">
<input type="submit" value="提交">
</form>

control中接收数据

@RequestMapping(value = "/employee",method = RequestMethod.POST)
public String add(@RequestParam("employee") Employee employee){
System.out.println(employee);
return "redirect:/input";
}

可以知道中间需要一个String转换为employee的转换器

/*
* 1、需要添加注解组件
* 2、需要在springmvc配置文件中配置
* */
@Component
public class EmployeeConverter implements Converter<String, Employee> {
@Override
public Employee convert(String source) {
//last-name-email-gender-department-department.id
if(source!=null){
String[] values = source.split("-");
if (values!=null&&values.length == 4){
String lastName = values[0];
String email = values[1];
Integer gender = Integer.parseInt(values[2]);
Department department = new Department();
department.setDepartmentId(Integer.parseInt(values[3]));
Employee employee = new Employee(null, lastName, email, gender, department);
System.out.println(source+"--> converter-->"+employee);
return employee;
}
}
return null;
}
}

这个转换器需要配置到springmvc配置文件的注解驱动里面

<!--此处注入conversion-service属性-->
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/> <!--配置conversionService:
把这个配置之后还需要把这个注入到注解驱动的一个属性-->
<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--把自定义的转换器注入到converter属性中来-->
<property name="converters" ref="employeeConverter"/>
</bean>

mvc:annotation-driven学习

会自动注册:

RequestMappingHandlerMapping 、

RequestMappingHandlerAdapter

ExceptionHandlerExceptionResolver 三个bean。

还可以

  • 支持使用 ConversionService 实例对表单参数进行类型转换
  • 支持使用 @NumberFormat@DateTimeFormat 注解完成数据类型的格式化
  • 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
  • 支持使用 @RequestBody@ResponseBody 注解

@DateTimeFormat使用

在spring-mvc配置文件配置了mvc:annotation-driven之后

在对应的pojo中

//直接就实现了string到Date
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDate;

@NumberFormat使用

同上

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

@InitBinder实现手动映射数据

由 @InitBinder 标识的方法,可以对 WebDataBinder 对 象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定

@InitBinder方法不能有返回值,它必须声明为void。

@InitBinder方法的参数通常是是 WebDataBinde

比如下面这个方法就可以使映射过来的lastName数据被忽略

@InitBinder
public void initBinder(WebDataBinder dataBinder){
dataBinder.setDisallowedFields("name");
}

数据格式化

数据校验

1、如何校验?

JSR表示Java Specification Requests,Java 规范提案。JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation。用于验证bean属性注入值类型,格式等有效性。

添加依赖

<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>

constraint

@Null 被注释的元素必须为null
@NotNull 被注释的元素不能为null
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min) 被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达
@Email 被注释的元素必须是电子邮件地址
@NotEmpty 被注释的字符串必须非空

Hibernate Validator 附加的 constraint

@Length 被注释的字符串的大小必须在指定的范围内
@Range 被注释的元素必须在合适的范围内

注意点:

  • 数值检查建议使用在Stirng,Integer类型,不要使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null 。
使用@Valid

用于修饰@Component组件类,结合上面的属性级别constraint注解,给类属性字段加一层数据校验。一般搭配@ConfigurationProperties类级别注解使用,校验外部配置值的有效性。

  • @Validated所在包路径:org.springframework.validation.annotation.Validated

2、页面出错转到那个页面?

3、错误消息如何显示?如何国际化?

springMVC-7-数据处理转换的更多相关文章

  1. 160912、工具类:spring+springmvc自定义编码转换

    一.自定义的类(注意其中的属性,web.xml中的配置就是根据这个类的) import org.springframework.web.filter.OncePerRequestFilter; imp ...

  2. springMvc的日期转换之二

    方式一:使用@InitBinder注解实现日期转换 前台页面: 后台打印: 方式二:处理多种日期格式类型之间的转换 采用方式:由于binder.registerCustomEditor(Date.cl ...

  3. springmvc 请求和响应的json和Object的转换

    就是两个注解的使用@RequestBody和@ResponseBody注解的使用,然后springmvc解析进行转换然后注入 例子: @RequestMapping("/...") ...

  4. springmvc配置MappingJackson2HttpMessageConverter实现属性驼峰和下划线的转换

    需求 php调用java接口时,因为php那边的属性都是下划线风格,java这边的属性都是驼峰的风格.配置springmvc的json转换,在requestBody的时候(调用对象的set 方法)将j ...

  5. springMVC的一些工具类

    springMVC的一些工具类,主要有转换器,读取器 读取文件: package cn.edu.hbcf.common.springmvc; import java.util.HashMap; imp ...

  6. Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建(转)

    这篇文章主要讲解使用eclipse对Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建过程,包括里面步骤和里面的配置文件如何配置等等都会详细说明. 如果还没有搭建好环境( ...

  7. Eclipse+Spring+SpringMVC+Maven+Mybatis+MySQL+Tomcat项目搭建

    ---恢复内容开始--- 1. 建表语句及插入数据 CREATE TABLE `book_user` ( user_id INT(11) NOT NULL AUTO_INCREMENT, user_n ...

  8. SpringMVC知识一锅烩

    Spring简介 SpringMVC和Struts2一样都是属于表现层的框架,将前段发出的请求分发给对应的后端处理器即Controller 处理流程 用户请求被前端控制前拦截,然后根据对应的拦截路径去 ...

  9. SpringMVC从认识到细化了解

    目录 SpringMVC的介绍 介绍: 执行流程 与strut2的对比 基本运行环境搭建 基础示例 控制器的编写 控制器创建方式: 请求映射问题: 获取请求提交的参数 通过域对象(request,re ...

  10. eclipse下SpringMVC+Maven+Mybatis+MySQL项目搭建

    这篇文章主要讲解使用eclipse对Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建过程,包括里面步骤和里面的配置文件如何配置等等都会详细说明. 接下来马上进入项目搭建 ...

随机推荐

  1. CAP 超详细名词解释

    目录 引言 概述 分布式 一致性 ACID中的一致性 可用性 分区容错性 可用性与分区容错性,傻傻分不清 问题1:分区容错性说分区故障正常工作,什么叫正常工作?这个正常工作是指满足可用性吗? 问题2: ...

  2. 使用cookies,免密登录禅道(一)

    导言:在做自动化的过程中,很多时候都需要绕过登录验证码来进行测试,可使用cookie 绕过验证码进行登录. 以下以自己搭建的禅道环境登录为例(其他网站也可以同样道理): #coding=gbkimpo ...

  3. 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断

    1.什么是ref? 1.ref和reactive-样 也是用来实现响应式数据的方法 由于reactive必须传递一个对象, 所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦 所以V ...

  4. Android系统编程入门系列之应用环境及开发环境介绍

        作为移动端操作系统,目前最新的Android 11.0已经发展的比较完善了,现在也到了系统的整理一番的时间,接下来的系列文章将以Android开发者为中心,争取用归纳总结的态度对初级入门者所应 ...

  5. 五、SELinux安全防护

    rwx 针对用户和组   SELinux  针对程序 targeted:定义网络程序规则   minimum:限制少量软件   mls:限制全部,没定义的全拒绝 [root@proxy ~]# vim ...

  6. 4.3CNN卷积神经网络最详细最容易理解--tensorflow源码MLP对比

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  CNN卷积神经网络 ...

  7. TestNG 组测试

    方法分组测试 1. 给@Test注解后面加groups参数,如 @Test(groups = "groupa") 2. 可以添加@BeforeGroups和@AfterGroups ...

  8. 注解式项目开发!详细解析Java中各个注解的作用和使用方式

    @Target 作用: 指明了修饰的这个注解的使用范围, 即被描述的注解可以用在哪里 @Target(ElementType.Type) ElementType取值的类型: TYPE: 类,接口或者枚 ...

  9. [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark

    [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 0x00 摘要 0 ...

  10. R-聚类

    一.定义:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类 二.距离:欧几里得度量(euclidean metric)也称欧氏距离       绝对值距离(manhattan)   ...