Spring MVC类型转换器(Converter)

本文介绍了如何在Spring MVC中创建自定义类型转换器,以处理特定的日期格式转换和用户输入转换。通过创建实体类、控制器类、转换器类,配置转换器并创建相关视图,实现了将用户输入数据自动映射到实体属性的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

例如,用户输入的日期可能有许多种形式,如“December 25,2014”“12/25/2014”和“2014-12-25”,这些都表示同一个日期。默认情况下,Spring 会期待用户输入的日期样式与当前语言区域的日期样式相同。例如,对于美国的用户而言,就是月/日/年的格式。如果希望 Spring 在将输入的日期字符串绑定到 LocalDate 时,使用不同的日期样式,则需要编写一个 Converter,才能将字符串转换成日期。

java.time.LocalDate 类是 Java 8 的一个新类型,用来替代 java.util.Date。还需使用新的 Date/Time API 来替换旧有的 Date 和 Calendar 类。
内置的类型转换器
在 Spring MVC 框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为 Spring MVC 框架有许多内置的类型转换器用于完成常用的类型转换。Spring MVC 框架提供的内置类型转换包括以下几种类型。
1)标量转换器
image.png
2)集合、数组相关转换器
image.png
类型转换是在视图与控制器相互传递数据时发生的。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换。

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

自定义类型转换器

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

例如需要用户在页面表单中输入信息来创建商品信息。当输入“bianchengbang,18,1.85”时表示在程序中自动创建一个 new User,并将“bianchengbang”值自动赋给 name 属性,将“18”值自动赋给 age 属性,将“1.85”值自动赋给 height 属性。

如果想实现上述应用,需要做以下 5 件事:

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

示例

本节示例基于《[@Controller和@RequestMapping注解]》一节创建的 springmvcDemo2 应用。

1. 创建实体类

在 net.biancheng.po 包下创建 User 实体类,代码如下。


1.  package net.biancheng.po;

3.  public class  User {
4.  private String  name;
5.  private Integer  age;
6.  private Double  height;

8.  /**省略setter和getter方法*/

10.  }

2. 创建控制器类

在 net.biancheng.controller 包下创建 UserController 控制器,代码如下。


1.  package net.biancheng.controller;

3.  import org.springframework.stereotype.Controller;
4.  import org.springframework.ui.Model;
5.  import org.springframework.web.bind.annotation.RequestBody;
6.  import org.springframework.web.bind.annotation.RequestMapping;
7.  import org.springframework.web.bind.annotation.RequestParam;
8.  import org.springframework.web.bind.annotation.ResponseBody;

10.  import net.biancheng.po.User;

12.  @Controller
13.  public class  UserController {
14.  @RequestMapping("/addUser")
15.  public String  addUser() {
16.  return "addUser";
17.  }
18.  }

创建 ConverterController 控制器,代码如下。


1.  package net.biancheng.controller;

3.  import org.springframework.stereotype.Controller;
4.  import org.springframework.ui.Model;
5.  import org.springframework.web.bind.annotation.RequestMapping;
6.  import org.springframework.web.bind.annotation.RequestParam;

8.  import net.biancheng.po.User;

10.  @Controller
11.  public class  ConverterController {

13.  @RequestMapping("/converter")
14.  public String  myConverter(@RequestParam("user") User  user, Model  model) {
15.  model.addAttribute("user", user);
16.  return "showUser";
17.  }
18.  }

3. 创建自定义类型转换器

创建 net.biancheng.converter,在该包下创建自定义类型转换器 UserConverter,代码如下。


1.  package net.biancheng.converter;

3.  import org.springframework.core.convert.converter.Converter;
4.  import org.springframework.stereotype.Component;

6.  import net.biancheng.po.User;

8.  @Component
9.  public class  UserConverter implements Converter
4. 配置转换器

在 springmvc-servlet.xml 文件中添加以下代码。

1.  
2.  
 
 
3.  
4.  
5.  
6.  
7.  
8.  
9.  

5. 创建相关视图

创建添加用户页面 addUser.jsp,代码如下。

1.  <%@ page language="java" contentType="text/html; charset=UTF-8"
2.  pageEncoding="UTF-8"%>
3.  
4.  
5.  
6.  
7.  添加用户
8.  
9.  
10.  

创建显示用户页面 showUser.jsp,代码如下。

1.  <%@ page language="java" contentType="text/html; charset=UTF-8"
2.  pageEncoding="UTF-8"%>
3.  
4.  
5.  
6.  
7.  文件上传
8.  
9.  

11.  您创建的用户信息如下:
12.  
13. 14. 用户名:${user.name }
15. 年龄:${user.age }
16. 身高:${user.height } 18. 19.
6. 测试

访问地址:http://localhost:8080/springmvcDemo2/addUser,运行结果如下图所示。

image.png

addUser.jsp

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值