SpringMVC框架之Converter,Formatter转换器

本文介绍了SpringMVC框架中的Converter和Formatter接口,用于数据类型转换。Converter接口支持任意类型转换,包括内置的基本类型转换器和自定义转换器的实现步骤。Formatter接口专注于将String转换为其他类型,适合Web应用中的请求数据处理。文章还列举了SpringMVC内置的多种转换器和格式化器。

SpringMVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里的S表示源类型T表示目标类型。一般情况使用框架内置转换器就可以,特殊情况需编写有特定功能的类型转换器。
1.Converter

  1. 内置的类型转换器

    • 标量转换器
      StringToBooleanConverter:String到boolean类型转换。
      ObjectToStringConverter:Object 到String 转换,调用toString方法转换。
      String ToNumberConverterFactory:String 到数字转换(如Integer、Long等)。
      Number ToNumber ConverterFactory:数字子类型(基本类型)到数字类型(包装类型
      转换。
      String ToCharacterConverter:String到Character转换,取字符串第一个字符。
      Number ToCharacterConverter:数字子类型到Character转换。
      Character ToNumberFactory:Character 到数字子类型转换。
      String ToEnumConverterFactory:String到枚举类型转换,通过Enum.valueOf将字符
      串转换为需要的枚举类型。
      Enum ToStringConverter:枚举类型到String转换,返回枚举对象的name0值。
      String ToLocaleConverter:String到java.util.Locale转换。
      Properties ToStringConverter:java.util.Properties 到String转换,默认通过ISO-8859-1
      解码。
      String ToPropertiesConverter:String到java.util.Properties转换,默认使用ISO-8859-1
      编码。

    • 集合,数组相关转换器
      Array TocolectionConverter:任意数组到任意集合(List、Set)转换。
      CollectionToArray Converter:任意集合到任意数组转换。
      Array ToArrayConverter:任意数组到任意数组转换。
      Collection ToCollectionConverter:集合之间的类型转换。
      MapToMapConverter:Map之间的类型转换。个“首请田动个法面T饮
      Array ToStringConverter:任意数组到String转换。
      String ToArayConverter:字符串到数组的转换,默认通过“,”分隔,且去除字符串
      的两边空格(trim)。
      Array ToObjectConverter:任意数组到Object的转换,如果目标类型和源类型兼容,
      直接返回源对象;否则返回数组的第一个元素并进行类型转换。
      Object ToArrayConverter:Object到单元素数组转换。
      Collection ToStringConverter:任意集合(List、Set)到String 转换。M
      String ToCollectionConverter:String 到集合(List、Set)转换,默认通过“,”分隔,
      且去除字符串的两边空格(trim)。
      Collection ToObjectConverter:任意集合到任意Object的转换,如果目标类型和源类
      型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换。内下、
      ObjectToCollectionConverter:Object到单元素集合的类型转换。
      类型转换是在视图与控制器相互传递数据时发生的。Spring MVC框架对于基本类型
      如int、long、float、double、boolean以及char等,已经做好了基本类型转换。

  2. 自定义类型转换器
    当SpringMVC框架内置的类型转换器不能够满足需求时,开发者可以开发自己的类型转换器
    实现自己的类型转换器需有5步:
    (1):创建实体类
    (2):创建控制器类
    (3):创建自定义类型转换器
    (4):注册类型转换器
    (5):创建相关视图
    domain类

public class GoodsModel {
private String goodsname;
 private double goodsprice;
 private int goodsnumber;
 public String getGoodsname() {
  return goodsname;
 }
 public void setGoodsname(String goodsname) {
  this.goodsname = goodsname;
 }
 public double getGoodsprice() {
  return goodsprice;
 }
 public void setGoodsprice(double goodsprice) {
  this.goodsprice = goodsprice;
 }
 public int getGoodsnumber() {
  return goodsnumber;
 }
 public void setGoodsnumber(int goodsnumber) {
  this.goodsnumber = goodsnumber;
 }
}

创建控制器类 创建ConverterController.java的类文件

@Controller
@RequestMapping("/my")
public class ConverterController {
 @RequestMapping("/converter")
 public String myConverter(@RequestParam("goods") GoodsModel gm,Model model) {
  model.addAttribute("goods", gm);
  return "showGoods";
 }
}

创建自定义类型转换器
自定义类型转换器需要实现Converter<S,T>接口,重写convert(S)接口方法。convert(S)方法功能是将源数据类型S转换成目标数据类型T。
自定义为GoodsConvert代码

public class GoodsConverter implements Converter<String, GoodsModel>{
@Override
 public GoodsModel convert(String source) {
  // TODO Auto-generated method stub
  GoodsModel goods = new GoodsModel();
  String stringValues[] = source.split(",");
  if(stringValues !=null && stringValues.length == 3) {
   //为Goods实例赋值
   goods.setGoodsname(stringValues[0]);
   goods.setGoodsprice(Double.parseDouble(stringValues[1]));
   goods.setGoodsnumber(Integer.parseInt(stringValues[2]));
   return goods;
  }else {
   throw new IllegalArgumentException(String.format("类型转换失败需要格式'aa,232,232',但是格式是[%s]",source));
  }
  }
 }

创建两个视图界面
input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
       <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<base href="<%=basePath%>">
</head>
<body>
 <form action="my/converter" method="post">
     请输入商品信息(格式为:apple,10.58,200):
     <input type="text" name="goods"/><br>
     <input type="submit" value="提交"/>
    </form>
</body>
</html>

showGoods.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    您创建的商品信息如下:<br>
  <!-- 使用EL表达式取出model中goods的信息 -->
    商品名为:${goods.goodsname }, 
    商品价格为:${goods.goodsprice },
    商品数量为:${goods.goodsnumber }。
</body>
</html>

在这里插入图片描述
在这里插入图片描述

2.Formatter
Spring MVC框架的Formatter与Converter<S,T>一样,也是一个可以将一种数据
类型转换成另一种数据类型的接口。但不同的是,Formatter的源数据类型必须是
String 类型,而Converter<S,T>的源数据类型是任意数据类型。
在Web应用中,由HTTP发送的请求数据到控制器中都是以String类型获取。因此,、
在Web应用中选择Formatter比选择Converter<S,T>更加合理。
.

内置的格式化转换器
Spring MVC提供几个内置的格式化转换器,具体如下。
·NumberFormatter:实现Number与String之间的解析与格式化。
·CurrencyFormatter:实现Number与String之间的解析与格式化(带货币符号)。
·PercentFormatter:实现Number与String之间的解析与格式化(带百分数符号)。
·DateFormatter:实现Date与String之间的解析与格式化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值