😀前言
基本数据类型,特殊数据类型-和字符串自动转换
🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
基本数据类型,特殊数据类型-和字符串自动转换
基本介绍
说明: 在我们提交数据(比如表单时)SpringMVC 怎样对提交的数据进行转换和处理的
基本数据类型可以和字符串之间自动完成转换,
比如:Spring MVC 上下文中内建了很多转换器,可完成大多数 Java 类型的转换工作。[相互转换,这里只列出部分]
ConversionService converters =
- java.lang.Boolean- >java.lang.String:org.springframework.core.convert.support.ObjectToStringConverter@f874ca
- java.lang.Character -> java.lang.Number : CharacterToNumberFactory@f004c9
- java.lang.Character -> java.lang.String : ObjectToStringConverter@68a961
- java.lang.Enum -> java.lang.String : EnumToStringConverter@12f060a
- java.lang.Number -> java.lang.Character : NumberToCharacterConverter@1482ac5
- java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory@126c6f
- java.lang.Number -> java.lang.String : ObjectToStringConverter@14888e8
- java.lang.String -> java.lang.Boolean : StringToBooleanConverter@1ca6626
- java.lang.String -> java.lang.Character : StringToCharacterConverter@1143800
- java.lang.String -> java.lang.Enum : StringToEnumConverterFactory@1bba86e
- java.lang.String -> java.lang.Number : StringToNumberConverterFactory@18d2c12
- java.lang.String -> java.util.Locale : StringToLocaleConverter@3598e1
- java.lang.String -> java.util.Properties : StringToPropertiesConverter@c90828
- java.lang.String -> java.util.UUID : StringToUUIDConverter@a42f23
- java.util.Locale -> java.lang.String : ObjectToStringConverter@c7e20a
- java.util.Properties -> java.lang.String : PropertiesToStringConverter@367a7f
- java.util.UUID -> java.lang.String : ObjectToStringConverter@112b07f
- …….
基本数据类型和字符串自动转换
代码实例 -页面演示方式
需求->基本数据类型可以和字符串之间自动完成转换
创建Monster 类
public class Monster { private Integer id; private String email; private Integer age; private String name; public Monster(Integer id, String email, Integer age, String name,) { this.id = id; this.email = email; this.age = age; this.name = name; } public Monster() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Monster{" + "id=" + id + ", email='" + email + '\'' + ", age=" + age + ", name='" + name + '\'' + '}'; } }
创建data_valid.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>SpringMVC[数据格式/验证等]</title> </head> <body> <h1>SpringMVC[数据格式/验证等]</h1> <hr> <a href="<%=request.getContextPath()%>/addMonsterUI">添加妖怪</a> </body> </body> </html>
创建MonsterHandler类
@RequestMapping(value = "/addMonsterUI") public String addMonsterUI(Map<String, Object> map) { map.put("monster", new Monster()); return "datavalid/monster_addUI"; }
创建monster_addUI.jsp
<html> <head> <title>添加妖怪</title> </head> <body> <h3>添加妖怪</h3> <form:form action="save" method="post" modelAttribute="monster"> 妖怪名字: <form:input path="name"/><br><br> 妖怪年龄~: <form:input path="age"/><br><br> 电子邮件: <form:input path="email"/> <br><br> <input type="submit" value="添加妖怪"/> </form:form> </body> </html>
解读:
1. 这里的表单,我们使用springMVC的标签来完成
2. SpringMVC 表单标签在显示之前必须在 request 中有一个 bean,
该 bean 的属性和表单标签的字段要对应!
request 中的 key 为: form 标签的 modelAttrite 属性值, 比如这里的monster
3. SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 应用的根目录.
4.
这里需要给request增加一个 monster,因为jsp 页面 的modelAttribute="monster"需要这时是springMVC的内部的检测机制 即使是一个空的也需要,否则报错.
说明
如果你跳转的页面使用springmvc标签就需要准备一个对象,放入request域中,这个对象的属性名 monster, 对应springmvc表单标签的 modelAttribute="monster"
阶段测试一下
继续完成功能
创建success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>添加成功</title> </head> <body> <h1>恭喜, 添加成功~</h1> </body> </html>
修改 MonsterHandler.java , 增加处理添加请求
编写方法,处理添加妖怪
1. springmvc可以将提交的数据,按照参数名和对象的属性名匹配
2. 直接封装到对象中->前面讲解模型数据时,讲过String => Integer
@RequestMapping(value = "/save") public String save(Monster monster) { System.out.println("----monster---" + monster); return "datavalid/success"; }
测试
浏览器: http://localhost:8080/springmvc/data_valid.jsp
1) 如果age 输入的是 数字,则通过, 说明SpringMVC可以将提交的字符串 数字,比如"28",转成 Integer/int
2) 如果不是数字,则给出 400 的页面
3) 如何给出对应的提示,我们后面马上讲解
-Postman 完成
1) 如果age 输入的是 数字,则通过, 说明SpringMVC可以将提交的字符串 数字,比如"28", 转成 Integer/int
2) 如果不是数字,则给出 400 的页面 与上面测试一模一样
特殊数据类型和字符串间的转换
应用实例 -页面演示方式
1. 特殊数据类型和字符串之间的转换使用注解(比如日期,规定格式的小数比如货币形式
等)
2. 对于日期和货币可以使用 @DateTimeFormat 和 @NumberFormat 注解. 把这两个注
解标记在字段上即可
修改 Monster.java , 增加 birthday 和 salary 字段
public class Monster { private Integer id; private String email; private Integer age; private String name; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday; @NumberFormat(pattern = "###,###.##") private Float salary; public Monster(Integer id, String email, Integer age, String name, Date birthday, Float salary) { this.id = id; this.email = email; this.age = age; this.name = name; this.birthday = birthday; this.salary = salary; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Float getSalary() { return salary; } public void setSalary(Float salary) { this.salary = salary; } public Monster() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Monster{" + "id=" + id + ", email='" + email + '\'' + ", age=" + age + ", name='" + name + '\'' + ", birthday=" + birthday + ", salary=" + salary + '}'; } }
修改 monster_addUI, 增加 birthday 和salary字段
妖怪年龄~: <form:input path="age"/> <br><br> 妖怪生日: <form:input path="birthday"/> 要求以"9999-11-11"的形式<br><br> 妖怪工资: <form:input path="salary"/> 要求以"123,890.12"的形式<br><br>
测试
1) 如果 birthday 和 salary 是按照指定格式输入,则通过, 说明 SpringMVC 可以按注解指定
格式转换
2) 如果没有按照注解指定格式,则给出 400 的页面
3) 如何给出对应的提示,我们后面马上讲解
😄总结
参数名和对象的属性名匹配
SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 应用的根目录.
这里需要给request增加一个 monster,因为jsp 页面 的modelAttribute="monster"需要这时是springMVC的内部的检测机制 即使是一个空的也需要,否则报错.
SpringMVC 表单标签在显示之前必须在 request 中有一个 bean,
该 bean 的属性和表单标签的字段要对应!
request 中的 key 为: form 标签的 modelAttrite 属性值, 比如这里的monster
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞