8,Spring MVC框架中的数据格式转换
1.在添加用户功能中输入新增用户信息,点击保存之后系统报错
400状态码:客户端发送的请求格式不正确
控制台:BindException异常
在Spring MVC中时间数据无法实现自动转换绑定
解决方案
必须要手动配置自定义数据类型的绑定才能实现该功能
数据转换和格式化
2.DataBinder
数据绑定的核心组件
核心调度
3.ConversionService
Spring类型转换体系的核心接口
解决form表单中时间格式字符串转换为Date类型数据的问题
4.Validator:数据校验
5.BindingResult
包含已完成数据绑定的入参对象和相应的校验错误对象
配置mvc:annotation-driven/标签会注册一个默认的ConversionService实例,使得方法入参绑定能够支持注解驱动的功能,因此可以通过格式化注解来解决日期的转换问题
- 使用自定义的数据格式转换器实现日期类型数据绑定的功能
- Converter转换器
作用:把数据从一种类型转换成另一种类型
方法:convert()
- 实现步骤
创建自定义数据格式转换器
装配自定义的ConversionService
使用@InitBinder装配自定义编辑器
创建BaseController.java
@InitBinder public void initBinder(WebDataBinder dataBinder){ logger.info("进入BaseController的initBinder方法"); dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); }
9,使用Spring MVC实现单文件上传
9.1,实现步骤
1.导入依赖jar包
<!-- commons 文件上传jar --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
2.配置MultipartResolver解析器
<!-- 配置multipartResolver,用于上传文件,使用spring的CommonsMultipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxInMemorySize" value="5000000"></property> <property name="defaultEncoding" value="UTF-8"></property> </bean>
3.编写Controller 层
@RequestMapping("/addsysUser") public String addsysUser(SysUser sysUser, HttpServletRequest request, MultipartFile photo){ String fileType = photo.getOriginalFilename(); int index = fileType.lastIndexOf("."); fileType = fileType.substring(index); String path = request.getSession().getServletContext().getRealPath("static"+ File.separator+"uploadfiles"); long filename = System.currentTimeMillis(); System.out.println(path); System.out.println(fileType); System.out.println(path+"\\"+filename+fileType); File file = new File(path+"\\"+filename+fileType); try { photo.transferTo(file); } catch (IOException e) { e.printStackTrace(); } sysUser.setAvatar(filename+fileType); sysUserService.addSysUser(sysUser); return "redirect:/sysUserController/sysUser"; }
4.编写jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2023/6/29 Time: 15:49 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <!-- 一定要在from加enctype --> <form method="post" action="/sysUserController/addsysUser" enctype="multipart/form-data"> 用户名<input type="text" name="userName"><br> 昵称<input type="text" name="nickName"><br> 密码<input type="text" name="password"><br> 账号状态<input type="text" name="status"><br> 邮箱<input type="text" name="email"><br> 手机号<input type="text" name="phonenumber"><br> 用户性别<input type="text" name="sex"><br> 头像<input type="file" name="photo"><br> // 注意用file 用户类型<input type="text" name="userType"><br> 创建人的用户id<input type="text" name="createBy"><br> 创建时间<input type="text" name="createTime"><br> 更新人<input type="text" name="updateBy"><br> 更新时间<input type="text" name="updateTime"><br> 删除标志<input type="text" name="delFlag"><br> <input type="submit"> </form> </body> </html>
结束!!!!