当前位置: 首页 > news >正文

SpringMVC使用:类型转换数据格式化数据验证

01-类型转换器

先在pom.xml里面导入依赖,一个是mvc框架的依赖,一个是junit依赖

然后在web.xml里面导入以下配置(配置的详细说明和用法我在前面文章中有写到)

创建此测试类的方法用于测试springmvc是具备自动类型转换功能的

user属性如下

show.jsp内容如下

在客户端输入如下数据

输出如下重点看日期他给转换了,说明springmvc底层以及做好了自动类型转换

我们在客户端上写的内容是在request.getparammer的所有不管你写的是数字还是什么,源数据都会是string,然后springmvc会自动转换类型为目标类型

如果我们运用springmvc没有的数据类型的话springmvc是不会提供自动转化的这时候我们需要自己创建一个类来实现,比如我们在客户端上输入2019-01-01

创建的转化类型的类需要继承接口Converter<String, Date>     <,>里面的逗号前面为原类型(客户端写的默认是string类型)逗号后面为目标类型,source.split("-").length==3意思是只要客户端第4个符号是-就会进入if条件语句,DataFormat用来格式化数据的

在spring-mvc.xml文件中配置自定义转换类型的转换器如下图bean class里的内容,此内容第一句话照写,set里面的内容需要写自定义的类对应的完整路径,写完后把id里的内容写入到静态配置文件里conversion-service="conversionService"加入这句话

最后输出成功

2、数据格式化

首选创建form表单,在add.jsp里面

在show.jsp中写入要显示的内容导入spring 标签库用于接收@DateTimeFormat和@NumberFormat注解格式化的内容,spring:eval一般用于显示格式化后数据的内容

配置spring-mvc.xml用于格式化注解可以使用

@NumberFormat注解内容解释

3、数据校验

首先要导入hibernate-validator的jar包

导入依赖后可以在类上用以下注解作用在属性上

然后再如下图解释创建方法

在add.jsp中写入errors.属性是为了获取错误信息显示到客户端上,user.属性是为了把提交后的数据重新写到文本上

SpringMVC是如何做到根据参数名动态绑定参数的?

用自动绑定的参数然后你转发它会自动的转发到model里面去,model在request域里面

基于spring form标签库的实现方式:

首先要用spring form标签库需要先传入一个空的User到model中

然后在add.jsp文件中写入form标签,一定要写下图这句话,然后form:form要写这样开头,modelAttribute="user"一定要写,因为我们获取到的数据都是user里面的属性,所以我们先创建了个user用@GetMapping

Springmvc form标签,动态获取数据源

先创建@ModelAttribute用于在每个方法被调用时都会先调用这个方法,先测试list,发现value的值和label的值是一样的,但是我们开发中不想让它俩一样咋办的,需要用到map了

创建@ModelAttribute用于在每个方法被调用时都会先调用这个方法,测试map的动态数据源value的值和label的值是不一样的

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux 路径写法,目录相关命令及文件管理命令
  • 软件工程知识点总结(1):软件工程概述
  • Rust : 从事量化的生态现状与前景
  • 小程序多个set-cookie无法处理
  • C#发送正文带图片带附件的邮件
  • webgl-插值渲染原理理解
  • YC教父的创始人模式VS职业经理人模式:AI时代的独立开发者崛起
  • 4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)
  • SpringBoot和Mybatis框架怎么防止SQL注入
  • Hystrix-熔断原理分析
  • [论文笔记]Dimensionality Reduction by Learning an Invariant Mapping
  • 828华为云征文|基于华为云Flexus云服务器X搭建jumpserver堡垒机软件
  • vue3 el-menu 菜单Maximum recursive updates exceeded 报错
  • qt事件过滤器
  • 《机器学习》数据预处理 删除、替换、填充 案例解析及实现
  • __proto__ 和 prototype的关系
  • 【node学习】协程
  • 08.Android之View事件问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS 专业技巧
  • Github访问慢解决办法
  • golang中接口赋值与方法集
  • nodejs调试方法
  • Sass 快速入门教程
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • web标准化(下)
  • 笨办法学C 练习34:动态数组
  • 关于Java中分层中遇到的一些问题
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 爬虫模拟登陆 SegmentFault
  • 问题之ssh中Host key verification failed的解决
  • 一些css基础学习笔记
  • 移动端 h5开发相关内容总结(三)
  • 用Visual Studio开发以太坊智能合约
  • ​浅谈 Linux 中的 core dump 分析方法
  • #define、const、typedef的差别
  • #FPGA(基础知识)
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (4)Elastix图像配准:3D图像
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Note)C++中的继承方式
  • (SpringBoot)第七章:SpringBoot日志文件
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (九)信息融合方式简介
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (七)c52学习之旅-中断
  • (七)Flink Watermark
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)软件性能测试
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)WLAN定义和基本架构转
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化