SpringMVC-08-类型转换器(Converter)

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 SpringMVC-08-类型转换器(Converter),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

2.8 类型转换器(Converter)

  • Spring MVC 框架的 Converter<S,T> 是一个内置的可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型。

注意:在使用内置类型转换器时,请求参数输入值-源类型与接收参数类型-目标类型要兼容,否则会报 400 错误。请求参数类型与接收参数类型不兼容问题需要学习输入校验后才可解决。

  • 日期字符串格式多,但Spring 会使用户输入的日期样式与当前语言区域的日期样式相同。若希望 Spring 在将输入的日期字符串转换为到 LocalDate 时,使用不同的日期样式,则需要编写一个 Converter,才能将字符串转换成日期。

java.time.LocalDate 类是 Java 8 的一个新类型,用来替代 java.util.Date。还需使用新的 Date/Time API 来替换旧有的 Date 和 Calendar 类。

  • 内置的类型转换器: 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 到单元素集合的类型转换

类型转换是在视图与控制器相互传递数据时发生的。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换.

  • 自定义类型转换器:当然程序猿可以开发自己的类型转换器

步骤:

  • 创建实体类。
  • 创建控制器类。
  • 创建自定义类型转换器类。
  • 注册类型转换器。
  • 创建相关视图。
  • 举例:

  • 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    String username;
    String pwd;
}
  • 控制器类
@Controller
@RequestMapping("/sys")
public class ModelController {

    @RequestMapping("/result")
    protected String afterMethod(@RequestParam("user") User user,Model model){
        model.addAttribute("user",user);
        return "result";
    }
}
  • 自定义类型转换器类
@Component
public class ConvertController implements Converter<String, User> {
    @Override
    public User convert(String source) {
        // 创建User实例
        User user = new User();
        // 以“,”分隔
        String stringvalues[] = source.split(",");
        if (stringvalues != null && stringvalues.length == 2) {
            // 为user实例赋值
            user.setUsername(stringvalues[0]);
            user.setPwd(stringvalues[1]);
            return user;
        } else {
            throw new IllegalArgumentException(String.format("类型转换失败, 需要格式'username, pwd',但格式是[% s ] ", source));
        }
    }
}
  • springmvc-servlet.xml中注册类型转换器。
<mvc:annotation-driven conversion-service="conversionService"/>
<!--注册类型转换器UserConverter -->
<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService">
    <property name="converters">
       <list><bean class="com.zk.controller.ConvertController"/></list>
    </property>
</bean>
  • index.jsp页面
<form action="/sys/result" method="post">
   请输入用户信息(格式为username,pwd):
   <input type="text" name="user" />
  <input type="submit" value="提交">
</form>
  • /web-inf/jsp/result.jsp
<body>
结果:${user.username}:${user.pwd}
</body>
  • 启动服务器进行测试。

下一篇:SpringMVC-09-传递参数的几种方式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123894.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!