博客
关于我
SpringMVC(7)——类型转换器Converter
阅读量:267 次
发布时间:2019-03-01

本文共 5549 字,大约阅读时间需要 18 分钟。

目录


概述

SpringMVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发者在实际应用中使用框架内置的类型转换器基本上就够了,但有时需要编写具有特定功能的类型转换器。

内置的类型转换器

Spring MVC框架提供了很多常用数据类型的转换器,类型转换是在视图与控制器相互传递数据时发生应用的。

  

基本类型转换器
转换器 描述
StringToBooleanConverter String到boolean类型转换。
ObjectToStringConverter Object到String转换,调用toString方法转换。
StringToNumberConverterFactory String到数字转换(例如Integer、Long等)。
NumberToNumberConverterFactory 数字子类型(基本类型)到数字类型(包装类型)转换。
 
StringToCharacterConverter String到Character转换,取字符串中的第一个字符。
NumberToCharacterConverter 数字子类型到Character转换。
CharacterToNumberFactory Character到数字子类型转换。
StringToEnumConverterFactory String到枚举类型转换,通Enum.valueOf将宇符串转换为需要的枚举类型。
EnumToStringConverter 枚举类型到String转换,返回枚举对象的name值。
StringToLocaleConverter String到java.util.Locale转换。
PropertiesToStringConverter java.util.Properties到String转换,默认通过ISO-8859-1解码
StringToPropertiesConverter String到java.util.Properties转换,默认使用ISO-8859-1编码。
集合、数组相关转换器
转换器 描述
ArrayToCollectionConverter 任意数组到任意集合(List、Set)转换。
CollectionToArrayConverter 任意集合到任意数组转换。
ArrayToArrayConverter 任意数组到任意数组转换。
CollectionToCollectionConverter 集合之间的类型转换。
MapToMapConverter Map之间的类型转换。
ArrayToStringConverter 任意数组到String转换。
StringToArrayConverter 字符串到数组的转换,默认通过“,“分割,且去除字符串两边的空格(trim)。
ArrayToObjectConverter 任意数组到Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换。
ObjectToArrayConverter Object到单元素数组转换。
CollectionToStringConverter 任意集合(List、Set)到String转换。
StringToCollectionConverter String到集合(List、Set)转换,默认通过“,“分割,且去除字符串两边的空格(trim)。
CollectionToObjectConverter 任意集合到任意Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换。
ObjectToCollectionConverter Object到单元素集合的类型转换。

自定义类型转换器

程序员可以自定义类型转换器,如把一个字符串数据转换成一个实体类对象。

实例:

按照如下图创建springmvc项目并且创建文件及文件夹:

创建实体类

Student.java

package springmvcdemo.pojo;public class Student {    private int id;    private String name;    private String password;    private String sex;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

创建控制器类

ConverterController.java

package springmvcdemo.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import springmvcdemo.pojo.Student;@Controller@RequestMapping("/student")public class ConverterController {    /**     * 使用@RequestParam("student")接收请求参数,然后调用自定义类型转换器StudentConverter将字符串值转换为Student的对象student     */    @RequestMapping("/converter")    public String converter(@RequestParam("student")Student student, Model model){        model.addAttribute("student",student);        return "showStudent";    }}

创建自定义类型转换器类

自定义类型转换器类需要实现Converter<S,T>接口,重写convert(S)接口方法。

convert(S)方法的功能是将源数据类型S转换成目标数据类型T。

StudentConverter.java

package springmvcdemo.converter;import org.springframework.core.convert.converter.Converter;import springmvcdemo.pojo.Student;public class StudentConverter implements Converter
{ @Override public Student convert(String s) { // 创建一个Student实例 Student student=new Student(); // 以“,”分隔 String[] stringValues = s.split(","); if(stringValues!=null&&stringValues.length==5){ // 为Student实例赋值 student.setId(Integer.parseInt(stringValues[0])); student.setName(stringValues[1]); student.setPassword(stringValues[2]); student.setSex(stringValues[3]); student.setAge(Integer.parseInt(stringValues[4])); return student; }else { throw new IllegalArgumentException(String.format("类型转换失败,需要格式'1,张三,abc,男,18',但格式是[%s]",s)); } }}

注册类型转换器

在配置文件中注册自定义类型转换器。

springmvc-servlet.xml

创建JSP视图文件

showStudent.jsp

<%@ page import="springmvcdemo.pojo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>    显示学生信息    <%        Student student = (Student)request.getAttribute("student");    %>    学生ID:<%=student.getId()%>
学生姓名:<%=student.getName()%>
学生密码:<%=student.getPassword()%>
学生性别:<%=student.getSex()%>
学生年龄:<%=student.getAge()%>

input.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    输入
请输入学生信息(格式为:1,张三,abc,男,19):

web.xml

dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/config/springmvc-config/springmvc-servlet.xml
1
dispatcher
/

运行效果

输入如下地址:

输入信息并提交

(中文乱码)

如果输入不符合格式(如把英文逗号变成中文逗号)

将报错

 

如果对完整源码有兴趣。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201911152015】可获取本节源码。

 

转载地址:http://vlzx.baihongyu.com/

你可能感兴趣的文章
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
MySQL Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>