Spring MVC 类型转换器和转换器工厂

news/2024/7/18 23:28:30

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

内置的类型转换器

在 Spring MVC 框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为 Spring MVC 框架有许多内置的类型转换器用于完成常用的类型转换。Spring MVC 框架提供的内置类型转换包括以下几种类型。

1)标量转换器

名称作用
StringToBooleanConverterString 到 boolean 类型转换
ObjectToStringConverterObject 到 String 转换,调用 toString 方法转换
StringToNumberConverterFactoryString 到数字转换(例如 Integer、Long 等)
NumberToNumberConverterFactory数字子类型(基本类型)到数字类型(包装类型)转换
StringToCharacterConverterString 到 Character 转换,取字符串中的第一个字符
NumberToCharacterConverter数字子类型到 Character 转换
CharacterToNumberFactoryCharacter 到数字子类型转换
StringToEnumConverterFactoryString 到枚举类型转换,通过 Enum.valueOf 将字符串转换为需要的枚举类型
EnumToStringConverter枚举类型到 String 转换,返回枚举对象的 name 值
StringToLocaleConverterString 到 java.util.Locale 转换
PropertiesToStringConverterjava.util.Properties 到 String 转换,默认通过 ISO-8859-1 解码
StringToPropertiesConverterString 到 java.util.Properties 转换,默认使用 ISO-8859-1 编码

2)集合、数组相关转换器

名称作用
ArrayToCollectionConverter任意数组到任意集合(List、Set)转换
CollectionToArrayConverter任意集合到任意数组转换
ArrayToArrayConverter任意数组到任意数组转换
CollectionToCollectionConverter集合之间的类型转换
MapToMapConverterMap之间的类型转换
ArrayToStringConverter任意数组到 String 转换
StringToArrayConverter字符串到数组的转换,默认通过“,”分割,且去除字符串两边的空格(trim)
ArrayToObjectConverter任意数组到 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换
ObjectToArrayConverterObject 到单元素数组转换
CollectionToStringConverter任意集合(List、Set)到 String 转换
StringToCollectionConverterString 到集合(List、Set)转换,默认通过“,”分割,且去除字符串两边的空格(trim)
CollectionToObjectConverter任意集合到任意 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换
ObjectToCollectionConverterObject 到单元素集合的类型转换

类型转换是在视图与控制器相互传递数据时发生的。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换。例如,对于 addGoods.jsp 的提交请求,可以由以下处理方法来接收请求参数并处理:

 
  1. package controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5.  
  6. @Controller
  7. public class Goodsontroller {
  8. @RequestMapping("/addGoods")
  9. public String add(String goodsname, double goodsprice, int goodsnumber) {
  10. double total = goodsprice * goodsnumber;
  11. System.out.println(total);
  12. return "success";
  13. }
  14. }

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

自定义类型转换器

当 Spring MVC 框架内置的类型转换器不能满足需求时,开发者可以开发自己的类型转换器。


http://www.niftyadmin.cn/n/4644352.html

相关文章

PLSQL/Oracle解决中文乱码问题

问题描述&#xff1a; PLSQL/Oracle中文乱码&#xff1b; 问题原因&#xff1a; PLSQL客户端编码和服务器端编码不一致&#xff0c;插入中文时就会出现乱码&#xff1b; 解决办法&#xff1a; 1、查看服务器端编码&#xff1a; select userenv(language) from dual;2、查看PLS…

交换两个变量而不用临时变量

1: inline void Swap(int *a,int *b) 2: { 3: *a*a*b; 4: *b*a-*b; 5: *a*a-*b; 6: } 是不是很有意思&#xff0c;真的没有用到其它的临时变量啊&#xff01;那我们上面的结论1是不是错了呢&#xff1f;当然不是&#xff0c;为什么可以直接就可以交换了呢&am…

双指针法合并2个有序链表

双指针法合并2个有序链表&#xff0c;其实是归并排序的解决思路。 package sort;public class MergeLinkedList {public static void main(String[] args) {ListNode l11 new ListNode(1);ListNode l12 new ListNode(3);ListNode l13 new ListNode(5);ListNode l14 new Li…

合适的知识结构 打造个人核心力

合适的知识结构 当今社会&#xff0c;知识爆炸、资源爆炸、信息爆炸&#xff0c;需要学的东东太多、太杂、太大、太乱&#xff0c;但您不可能需要一切、掌握一切、驾驭一切、拥有一切、得意一切、优势一切。所以&#xff0c;您必须会处理好主要知识、主力知识、核心知识、关键知…

找出两个有序数组的公共子数组

2017年美团在线笔试编程题——找出两个有序数组的公共子数组 请设计一个算法能够找出两个有序数组的公共子数组&#xff1b; 比如数组a{1,2,3,8,9}和b{8,9,10},则输出output{8,9} function findCommon(a,b){var i0,j0;var common[];count0;while(i<a.length&&j<…

文件指针 文件描述符

昨天在《C Programming FAQs》上看见了一段类似的代码&#xff0c;刚刚在CSDN问了&#xff0c;又Google了一下&#xff0c;整理下来。 代码&#xff1a; #include <stdio.h> FILE *myfopen(char *name) { FILE *fpfopen(name,"w"); fprintf(fp,"abcdef…

配置 Lotus Domino 使用第三方 CA - Microsoft Windows CA

简介&#xff1a; 本文描述了如何在 Lotus Domino 中配置使用第三方 CA 提供的数字证书以进行 Domino Web 页面的 SSL 登录&#xff0c;以及在收发 Internet 邮件时如何使用第三方 CA 数字证书进行签名和加密&#xff0c;并以 Windows CA 为例&#xff0c;全程描述了证书申请、…

2017年珍爱网面试题

console.log(NaNNaN) console.log(nullundefind) console.log(nullnull) 返回的结果依次是 false&#xff0c;false&#xff0c;true 任意俩个NaN不等。JavaScript权威指南第三章。好像可以用NaN&#xff01;NaN来判断这个var是不是NaN&#xff0c;只有NaN有这样的特性。 va…