首页 > 其他分享 >day09-1-数据格式化

day09-1-数据格式化

时间:2023-02-14 23:13:28浏览次数:46  
标签:lang day09 格式化 String id java 数据 public monster

数据格式化

1.基本介绍

说明:在我们提交数据(比如表单时),SpringMVC 是怎样对提交的数据进行转换和处理的

基本数据类型可以和字符串之间自动进行转换,比如:SpringMVC 上下文中内建了很多转换器,可以完成大多数 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

……

2.基本数据类型和字符串自动转换

应用实例:基本数据类型可以和字符串之间自动地完成转换

(1)Monster.java

package com.li.web.datavalid.entity;

/**
 * @author 李
 * @version 1.0
 */
public class Monster {
    private Integer id;
    private String email;
    private Integer age;
    private String name;

    public Monster() {}

    public Monster(Integer id, String email, Integer age, String name) {
        this.id = id;
        this.email = email;
        this.age = age;
        this.name = name;
    }

    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 + '\'' +
                '}';
    }
}

(2)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>
</html>

(3)MonsterHandler.java

package com.li.web.datavalid;

import com.li.web.datavalid.entity.Monster;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

/**
 * @author 李
 * @version 1.0
 * MonsterHandler 处理器响应用户提交数据
 * @Scope(value = "prototype")表示每次请求MonsterHandler都会生成一个新的对象
 */
@Controller
@Scope(value = "prototype")
public class MonsterHandler {
    /**
     * 显示添加monster的页面
     * 这里的 map,当我们向 map添加数据时,会默认存放到 request域中
     * @param map
     * @return
     */
    @RequestMapping(value = "/addMonsterUI")
    public String addMonsterUI(Map<String, Object> map) {
        //如果你跳转的页面使用了SpringMVC标签,就需要准备一个对象放入到request域中,
        //该对象的属性名要对应SpringMVC的form标签的modelAttribute的属性名,否则报错
        map.put("monster", new Monster());
        return "datavalid/monster_addUI";
    }

    /**
     * SpringMVC可以将提交的数据,按照参数名和形参对象的属性名匹配,
     * 然后直接封装到对象中[模型数据]
     * @param monster
     * @return
     */
    @RequestMapping(value = "/save")
    public String save(Monster monster) {
        System.out.println("monster---" + monster);
        return "datavalid/success";
    }
}

(4)monster_addUI.jsp:

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加妖怪</title>
</head>
<body>
<h3>添加妖怪</h3>
<%--
1. 这里的表单,我们使用SpringMVC的标签来完成,目的是方便提示信息的回显
2. SpringMVC表单标签在显示之前,必须在request域中有一个 bean(java对象),
    该 bean的属性名和表单标签的字段要对应!
3. request 域中的 key 为 form 标签的 modelAttribute的属性值,比如这里的 monsters
4.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB应用的根目录。
--%>
<form:form action="save" method="post" modelAttribute="monster">
    妖怪id:<form:input path="id"/><br/><br/>
    妖怪名字:<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>

(5)success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加成功</title>
</head>
<body>
<h1>恭喜你,添加成功</h1>
</body>
</html>

(6)测试

后台成功拿到了数据,并将 String 类型的字符串转化为相应的数据类型,赋给 Monster 对象属性。说明 SpringMVC 底层可以自动进行基本数据类型转换。

image-20230214191707886

3.特殊数据类型和字符串间的转换

  1. 特殊数据类型和字符串之间的转换可以使用注解来完成(比如日期,规定格式的小数比如货币形式)
  2. 对于日期和货币可以使用 @DataTimeFormat 和 @NumberFormat 注解。

应用实例

(1)修改Monster.java,增加 birthday 和 salary 字段。修改相应的构造器,getter 和 setter 等。

image-20230214192843967

(2)data_valid.jsp 不变

(3)MonsterHandler.java 不变

(4)修改 monster_addUI.jsp:

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加妖怪</title>
</head>
<body>
<h3>添加妖怪</h3>
<%--
1. 这里的表单,我们使用SpringMVC的标签来完成,目的是方便提示信息的回显
2. SpringMVC表单标签在显示之前,必须在request域中有一个 bean(java对象),
    该 bean的属性名和表单标签的字段要对应!
3. request 域中的 key 为 form 标签的 modelAttribute的属性值,比如这里的 monsters
4.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB应用的根目录。
--%>
<form:form action="save" method="post" modelAttribute="monster">
    妖怪id:<form:input path="id"/><br/><br/>
    妖怪名字:<form:input path="name"/><br/><br/>
    妖怪年龄:<form:input path="age"/><br/><br/>
    妖怪生日:<form:input path="birthday"/><br/><br/>
    妖怪工资:<form:input path="salary"/><br/><br/>
    电子邮件:<form:input path="email"/><br/><br/>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

(5)success.jsp 不变

(6)redeployTomcat,进行测试

提交的数据:

image-20230214194159990

后台输出:

monster---Monster{id=22, email='[email protected]', age=99, name='king', birthday=Tue Jan 01 00:00:00 CST 1924, salary=124567.22}

如果转换失败,将会提示:

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]]]

标签:lang,day09,格式化,String,id,java,数据,public,monster
From: https://www.cnblogs.com/liyuelian/p/17121169.html

相关文章

  • MyBatis if 和多数据库支持
    1.前言动态SQL是MyBatis最标志性的特性之一。在其它框架中,你可能需要根据不同的条件来拼接SQL,辗转在符号与条件的判断上,处理起来麻烦而且易错,而MyBatis的动态SQL......
  • golang 复杂数据类型
    1.指针一个指针变量指向了一个值的内存地址,类似于变量和常量,在使用指针前你需要声明指针。每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。使用&字符......
  • 【Vue】style和class 列表渲染 使用v-for进行循环 监控失效 双向数据绑定 过滤案例 事
    目录昨日回顾style和classclass属性的三种设置方法style属性的三种设置方法条件渲染列表渲染使用v-for进行循环循环数字循环字符串循环对象循环数组标签key值加速虚拟dom的......
  • 数据字典标准与统一的重要性(码表&枚举值)
    在日常的软件开发当中,开发者经常会听到“公共代码、编码、码表、枚举值”这样的名词,对这些概念可能会有些混淆和认知不透彻,那么这篇文章会详细论述一下关于数据字典的相关概......
  • 中电金信Gien享汇・大数据专题|金融数字化转型与数据应用
    本期嘉宾杨悦中电金信商业分析事业部副总经理毕业于哈尔滨工业大学,曾供职于华胜天成、东南融通公司。金融数据领域孜孜追求者,专注于金融行业数据平台、数据治理、数据应用......
  • 大数据常用命令
    一、Zookeeper服务端启动:zkServer.shstart二、MySQL三、Hadoop四、Hive五、Spark六、Flink七、Kafka八、HBase九、Phoenix十、Redis十一、Mongo十二、ELK......
  • 数据库的相关概念
    1.数据库(dataBase)存储数据的仓库,本质是一个文件系统;2.DBMS数据库管理系统DatabseManageMnetSystem 操作和管理数据可的大型软件,用于简历和维护数据库,对数据库......
  • 让数据应用不再复杂
    当前,数据已成为实现经济高质量增长的关键要素,最大化释放数据要素的价值是数字经济时代的重点。以数据全方位驱动企业发展,已成为数字经济时代企业塑造核心竞争力的关键。随着......
  • ElasticFlow数据流分析图和部署
    1、ElasticFlow的目的ElasticFlow利用sFlow等技术来收集网络中有关流量的信息,集流量收集、分析、报告于一体,深入了解流量与带宽的占用情况等用户最关心的问题,为全面了解企......
  • Python 使用mysql.connector、pymysql和 MYSQLdb(MysqlClient)操作MySQL数据库
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一。本文主要介绍安装mysql.connector,、pymysql......