day09-1-数据格式化

种地  金牌会员 | 2023-2-14 22:27:16 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 692|帖子 692|积分 2076

数据格式化

1.基本介绍

说明:在我们提交数据(比如表单时),SpringMVC 是怎样对提交的数据进行转换和处理的
基本数据类型可以和字符串之间自动进行转换,比如:SpringMVC 上下文中内建了很多转换器,可以完成大多数 java 类型的转换工作。[相互转换,这里只列出部分]
  1. ConversionService converters =
  2.    
  3. java.lang.Boolean-> java.lang.String:org.springframework.core.convert.support.ObjectToStringConverter@f874ca
  4. java.lang.Character -> java.lang.Number : CharacterToNumberFactory@f004c9
  5. java.lang.Character -> java.lang.String : ObjectToStringConverter@68a961
  6. java.lang.Enum -> java.lang.String : EnumToStringConverter@12f060a
  7. java.lang.Number -> java.lang.Character : NumberToCharacterConverter@1482ac5
  8. java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory@126c6f
  9. java.lang.Number -> java.lang.String : ObjectToStringConverter@14888e8
  10. java.lang.String -> java.lang.Boolean : StringToBooleanConverter@1ca6626
  11. java.lang.String -> java.lang.Character : StringToCharacterConverter@1143800
  12. java.lang.String -> java.lang.Enum : StringToEnumConverterFactory@1bba86e
  13. java.lang.String -> java.lang.Number : StringToNumberConverterFactory@18d2c12
  14. java.lang.String -> java.util.Locale : StringToLocaleConverter@3598e1
  15. java.lang.String -> java.util.Properties : StringToPropertiesConverter@c90828
  16. java.lang.String -> java.util.UUID : StringToUUIDConverter@a42f23
  17. java.util.Locale -> java.lang.String : ObjectToStringConverter@c7e20a
  18. java.util.Properties -> java.lang.String : PropertiesToStringConverter@367a7f
  19. java.util.UUID -> java.lang.String : ObjectToStringConverter@112b07f
  20. ……
复制代码
2.基本数据类型和字符串自动转换

应用实例:基本数据类型可以和字符串之间自动地完成转换
(1)Monster.java
  1. package com.li.web.datavalid.entity;
  2. /**
  3. * @author 李
  4. * @version 1.0
  5. */
  6. public class Monster {
  7.     private Integer id;
  8.     private String email;
  9.     private Integer age;
  10.     private String name;
  11.     public Monster() {}
  12.     public Monster(Integer id, String email, Integer age, String name) {
  13.         this.id = id;
  14.         this.email = email;
  15.         this.age = age;
  16.         this.name = name;
  17.     }
  18.     public Integer getId() {
  19.         return id;
  20.     }
  21.     public void setId(Integer id) {
  22.         this.id = id;
  23.     }
  24.     public String getEmail() {
  25.         return email;
  26.     }
  27.     public void setEmail(String email) {
  28.         this.email = email;
  29.     }
  30.     public Integer getAge() {
  31.         return age;
  32.     }
  33.     public void setAge(Integer age) {
  34.         this.age = age;
  35.     }
  36.     public String getName() {
  37.         return name;
  38.     }
  39.     public void setName(String name) {
  40.         this.name = name;
  41.     }
  42.     @Override
  43.     public String toString() {
  44.         return "Monster{" +
  45.                 "id=" + id +
  46.                 ", email='" + email + '\'' +
  47.                 ", age=" + age +
  48.                 ", name='" + name + '\'' +
  49.                 '}';
  50.     }
  51. }
复制代码
(2)data_valid.jsp:
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>SpringMVC[数据格式/验证等]</title>
  5. </head>
  6. <body>
  7. <h1>SpringMVC[数据格式/验证等]</h1>
  8. <hr/>
  9. <a target="_blank" href="https://www.cnblogs.com/<%=request.getContextPath()%>/addMonsterUI">添加妖怪</a>
  10. </body>
  11. </html>
复制代码
(3)MonsterHandler.java
  1. package com.li.web.datavalid;
  2. import com.li.web.datavalid.entity.Monster;
  3. import org.springframework.context.annotation.Scope;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import java.util.Map;
  7. /**
  8. * @author 李
  9. * @version 1.0
  10. * MonsterHandler 处理器响应用户提交数据
  11. * @Scope(value = "prototype")表示每次请求MonsterHandler都会生成一个新的对象
  12. */
  13. @Controller
  14. @Scope(value = "prototype")
  15. public class MonsterHandler {
  16.     /**
  17.      * 显示添加monster的页面
  18.      * 这里的 map,当我们向 map添加数据时,会默认存放到 request域中
  19.      * @param map
  20.      * @return
  21.      */
  22.     @RequestMapping(value = "/addMonsterUI")
  23.     public String addMonsterUI(Map<String, Object> map) {
  24.         //如果你跳转的页面使用了SpringMVC标签,就需要准备一个对象放入到request域中,
  25.         //该对象的属性名要对应SpringMVC的form标签的modelAttribute的属性名,否则报错
  26.         map.put("monster", new Monster());
  27.         return "datavalid/monster_addUI";
  28.     }
  29.     /**
  30.      * SpringMVC可以将提交的数据,按照参数名和形参对象的属性名匹配,
  31.      * 然后直接封装到对象中[模型数据]
  32.      * @param monster
  33.      * @return
  34.      */
  35.     @RequestMapping(value = "/save")
  36.     public String save(Monster monster) {
  37.         System.out.println("monster---" + monster);
  38.         return "datavalid/success";
  39.     }
  40. }
复制代码
(4)monster_addUI.jsp:
  1. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5.     <title>添加妖怪</title>
  6. </head>
  7. <body>
  8. <h3>添加妖怪</h3>
  9. <%--
  10. 1. 这里的表单,我们使用SpringMVC的标签来完成,目的是方便提示信息的回显
  11. 2. SpringMVC表单标签在显示之前,必须在request域中有一个 bean(java对象),
  12.     该 bean的属性名和表单标签的字段要对应!
  13. 3. request 域中的 key 为 form 标签的 modelAttribute的属性值,比如这里的 monsters
  14. 4.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB应用的根目录。
  15. --%>
  16. <form:form action="save" method="post" modelAttribute="monster">
  17.     妖怪id:<form:input path="id"/><br/><br/>
  18.     妖怪名字:<form:input path="name"/><br/><br/>
  19.     妖怪年龄:<form:input path="age"/><br/><br/>
  20.     电子邮件:<form:input path="email"/><br/><br/>
  21.     <input type="submit" value="添加妖怪"/>
  22. </form:form>
  23. </body>
  24. </html>
复制代码
(5)success.jsp
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>添加成功</title>
  5. </head>
  6. <body>
  7. <h1>恭喜你,添加成功</h1>
  8. </body>
  9. </html>
复制代码
(6)测试
后台成功拿到了数据,并将 String 类型的字符串转化为相应的数据类型,赋给 Monster 对象属性。说明 SpringMVC 底层可以自动进行基本数据类型转换。
3.特殊数据类型和字符串间的转换


  • 特殊数据类型和字符串之间的转换可以使用注解来完成(比如日期,规定格式的小数比如货币形式)
  • 对于日期和货币可以使用 @DataTimeFormat 和 @NumberFormat 注解。
应用实例
(1)修改Monster.java,增加 birthday 和 salary 字段。修改相应的构造器,getter 和 setter 等。
(2)data_valid.jsp 不变
(3)MonsterHandler.java 不变
(4)修改 monster_addUI.jsp:
  1. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5.     <title>添加妖怪</title>
  6. </head>
  7. <body>
  8. <h3>添加妖怪</h3>
  9. <%--
  10. 1. 这里的表单,我们使用SpringMVC的标签来完成,目的是方便提示信息的回显
  11. 2. SpringMVC表单标签在显示之前,必须在request域中有一个 bean(java对象),
  12.     该 bean的属性名和表单标签的字段要对应!
  13. 3. request 域中的 key 为 form 标签的 modelAttribute的属性值,比如这里的 monsters
  14. 4.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB应用的根目录。
  15. --%>
  16. <form:form action="save" method="post" modelAttribute="monster">
  17.     妖怪id:<form:input path="id"/><br/><br/>
  18.     妖怪名字:<form:input path="name"/><br/><br/>
  19.     妖怪年龄:<form:input path="age"/><br/><br/>
  20.     妖怪生日:<form:input path="birthday"/><br/><br/>
  21.     妖怪工资:<form:input path="salary"/><br/><br/>
  22.     电子邮件:<form:input path="email"/><br/><br/>
  23.     <input type="submit" value="添加妖怪"/>
  24. </form:form>
  25. </body>
  26. </html>
复制代码
(5)success.jsp 不变
(6)redeployTomcat,进行测试
提交的数据:
后台输出:
  1. monster---Monster{id=22, email='king@sohu.com', age=99, name='king', birthday=Tue Jan 01 00:00:00 CST 1924, salary=124567.22}
复制代码
如果转换失败,将会提示:
  1. Field error in object 'monster' on field 'birthday': rejected value [192401-01]; codes [typeMismatch.monster.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [monster.birthday,birthday]; arguments []; default message [birthday]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'birthday'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.util.Date] for value '192401-01'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [192401-01]]]
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表