基本数据类型,特殊数据类型-和字符串自动转换

简介: 基本数据类型,特殊数据类型-和字符串自动转换

😀前言

基本数据类型,特殊数据类型-和字符串自动转换

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉


基本数据类型,特殊数据类型-和字符串自动转换

基本介绍

说明: 在我们提交数据(比如表单时)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连支持一下,创造不易您们的支持是我的动力🤞


目录
相关文章
|
存储 供应链 大数据
医院HIS基层卫生健康云综合管理系统源码
护士站: 特点:住院护士站管理系统是住院护理的中心所在,它可实现病房的床位统一管理、医嘱校对、医嘱的执行、医嘱终止、重整医嘱、医嘱查询、健康日志、患者病历首页查询,转科、出院申请,病人在住院期间的信息管理、病房分类管理、对病房、患者信息、患者费用等相关信息的查询。
261 1
|
监控 网络协议 Java
I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)(上)
I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)
509 0
|
9月前
|
数据建模 网络安全
阿里云申请SSL证书价格多少钱一年?2025免费版和付费版收费标准
阿里云SSL证书提供免费和付费版本,适合不同需求。付费证书品牌涵盖WoSign、DigiCert、GlobalSign等,类型包括DV(域名验证)、OV(企业验证)和EV(扩展验证),价格从238元/年起,通配符和多域名证书价格更高。新用户享5折起优惠,全系列75折起。免费版由Digicert提供,仅支持单域名,有效期3个月,特殊域名可能无法申请。建议正式环境选用付费证书以确保稳定性与安全性。详情及申请流程可参考阿里云官方文档或控制台操作指引。
7587 0
|
12月前
|
安全 Java 调度
多线程基础——Synchronize
在Java中,`synchronized`关键字用于保证线程安全,通过加锁机制确保多线程环境下的原子性。它可以使线程由并行变为串行,虽然可能影响性能,但确保了结果的正确性。使用时需注意: 1. **修饰方法**:锁住实例对象。 2. **修饰代码块**:锁住当前调用方法的对象。 3. **修饰静态方法**:锁住类对象。 `synchronized`特性包括互斥、内存可见性和可重入。互斥确保同一时间只有一个线程能执行锁定代码;内存可见性保证线程间数据的一致性;可重入允许同一线程多次获取同一锁而不会死锁。
260 4
多线程基础——Synchronize
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的疫情期间学生信息管理平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的疫情期间学生信息管理平台附带文章源码部署视频讲解等
115 0
|
前端开发 JavaScript
如何模拟一个元素(如一个链接 <a>)被禁用(disabled)的状态
如何模拟一个元素(如一个链接 <a>)被禁用(disabled)的状态
111 0
|
弹性计算 小程序 双11
阿里云双11优惠云服务器ECS经济型e实例99元一年?要不来一台?
阿里云双11优惠云服务器ECS经济型e实例99元一年?要不来一台?
730 0
|
算法 Java
jvm性能调优 - 19G1分代回收原理深度图解
jvm性能调优 - 19G1分代回收原理深度图解
170 0
|
安全 算法 测试技术
|
Python 内存技术
你是否还记得有一款游戏叫做“魔塔”?(一)
你是否还记得有一款游戏叫做“魔塔”?
609 0
你是否还记得有一款游戏叫做“魔塔”?(一)

热门文章

最新文章