博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6.转换器和格式化
阅读量:5787 次
发布时间:2019-06-18

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

1.Converter:转换器 :可以在应用程序的任意层中使用

2.Formatter格式化:专门为Web设计

二者都可以将一种对象转换成另一种对象类型

 

1.Converter

必须实现org.springframework.core.convert.converter.Converter

public interface Converter<S,T>

S:是源类型

T:是目标类型

在类Body中,需要编写一个来自Converter接口的convert方法实现。

T convert(S source);

1 package app06a.converter; 2  3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6  7 import org.springframework.core.convert.converter.Converter; 8  9 public class StringToDateConverter implements Converter
{10 11 private String datePattern;12 13 public StringToDateConverter(String datePattern) {14 this.datePattern = datePattern;15 }16 17 @Override18 public Date convert(String s) {19 try {20 SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);21 dateFormat.setLenient(false);22 return dateFormat.parse(s);23 } catch (ParseException e) {24 // the error message will be displayed when using
25 throw new IllegalArgumentException(26 "invalid date format. Please use this pattern\""27 + datePattern + "\"");28 }29 }30 }

 

为了使用SpringMVC应用程序中定制Converter

需要在Spring MVC配置文件中编写converterService  bean

Bean的类名称为org.springframework.context.support.ConversionServiceFactoryBean

这个Bean必须包含一个converts属性,它将列出要在应用程序中使用所有定制的Converter

 

要给<mvc:annotation-driven conversion-service="conversionService"/>

conversion-service属性赋bean名称

1 
2
14 15
16 17
18
19
20 21
22
23
24
25 26
28
29
30
31
32
33
34
35
36

 

Employee类

1 package app06a.domain; 2  3 import java.io.Serializable; 4 import java.util.Date; 5  6 public class Employee implements Serializable { 7     private static final long serialVersionUID = -908L; 8  9     private long id;10     private String firstName;11     private String lastName;12     private Date birthDate;13     private int salaryLevel;14 15     public long getId() {16         return id;17     }18 19     public void setId(long id) {20         this.id = id;21     }22 23     public String getFirstName() {24         return firstName;25     }26 27     public void setFirstName(String firstName) {28         this.firstName = firstName;29     }30 31     public String getLastName() {32         return lastName;33     }34 35     public void setLastName(String lastName) {36         this.lastName = lastName;37     }38 39     public Date getBirthDate() {40         return birthDate;41     }42 43     public void setBirthDate(Date birthDate) {44         this.birthDate = birthDate;45     }46 47     public int getSalaryLevel() {48         return salaryLevel;49     }50 51     public void setSalaryLevel(int salaryLevel) {52         this.salaryLevel = salaryLevel;53     }54 55 }

 

Controller

有了StringToDateConverter converter,就不需要劳驾

controller类将字符串转换成日期了

1 package app06a.controller; 2  3 import org.apache.commons.logging.Log; 4 import org.apache.commons.logging.LogFactory; 5 import org.springframework.ui.Model; 6 import org.springframework.validation.BindingResult; 7 import org.springframework.validation.FieldError; 8 import org.springframework.web.bind.annotation.ModelAttribute; 9 import org.springframework.web.bind.annotation.RequestMapping;10 11 import app06a.domain.Employee;12 13 @org.springframework.stereotype.Controller14 15 public class EmployeeController {16     17     private static final Log logger = LogFactory.getLog(ProductController.class);18     19     @RequestMapping(value="employee_input")20     public String inputEmployee(Model model) {21         model.addAttribute(new Employee());22         return "EmployeeForm";23     }24 25     @RequestMapping(value="employee_save")26     public String saveEmployee(@ModelAttribute Employee employee, BindingResult bindingResult,27             Model model) {28         if (bindingResult.hasErrors()) {29             FieldError fieldError = bindingResult.getFieldError();30             logger.info("Code:" + fieldError.getCode() 31                     + ", field:" + fieldError.getField());32             return "EmployeeForm";33         }34         35         // save employee here36         37         model.addAttribute("employee", employee);38         return "EmployeeDetails";39     }40 }

 

1 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3  4  5  6 Add Employee Form 7  8  9 10 11 
12
13
14
Add an employee15

16 17

18

19

20 21

22

23

24

25

26

27 28

29

30

31 32 34

35
36
37
38 39

 

2.Formatter

Formatter也是将一种类型转换成另一种类型

但Formatter源类型必须是一个String,而Converter则适用于任意的源类型

 

为了创建Formmatter要编写一个org.springframework.format.Formatter接口的java类

public interface Formatter<T>

这里T表示输入字符串要转换的目标类型

T parse(String text,java.util.Locale.locale);

String print(T object,java.util.Locale.locale);

1 package app06b.formatter; 2  3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.Locale; 7  8 import org.springframework.format.Formatter; 9 10 public class DateFormatter implements Formatter
{11 12 private String datePattern;13 private SimpleDateFormat dateFormat;14 15 public DateFormatter(String datePattern) {16 System.out.println("DateFormatter()5b========");17 this.datePattern = datePattern;18 dateFormat = new SimpleDateFormat(datePattern);19 dateFormat.setLenient(false);20 }21 22 @Override23 public String print(Date date, Locale locale) {24 return dateFormat.format(date);25 }26 27 @Override28 public Date parse(String s, Locale locale) throws ParseException {29 try {30 return dateFormat.parse(s);31 } catch (ParseException e) {32 // the error message will be displayed when using
33 throw new IllegalArgumentException(34 "invalid date format. Please use this pattern\""35 + datePattern + "\"");36 }37 }38 }

 

为了在String MVC应用程序中使用Formmatter,需要利用conversionService bean

进行注册。

bean的类名称必须为org.springframework.format.support.FormattingConversionServiceFactoryBean.

还需要给Formatter添加一个<context:component-scan base-package="app06b.formatter" />

1 
2
12 13
14
15 16
17 18
19
20 21
23
24
25
26 27
29
30
31
32
33
34
35
36
37 38

 

3.用Registrar注册Formmatter

注册Formmatter的另一个方法是Registrar

1 public class MyFormmatterRegistrar implements FormatterRegistrar{ 2      3    private String datePattern; 4    public MyFormmatterRegistrar(String datePattern){ 5          this.datePattern = datePattern; 6     } 7  8    public void registerFormatters(FormatterRegistry resgitry){ 9        resgitry.addFormatter(new DateFormatter(datePattern));      10    }11 }

 

1 1  1 
2 2 2
12 12 12 13 13 13
14 14 14
15 15 15 16 16 16
17 17 17 18 18 18
19 19 19
20 20 20 21 21 21
23 23 23
24 24 24
25 25 25
26 26 26 27 27 27
29 29 29
30 30 30
31 31 31
32 32 32
33 33 33
34 34 34
35 35 35
36 36 36
37 37 37 38 38 38

 

选Converter还是Formatter,一般选Formatter,

因为Formmatter是在Web层

转载于:https://www.cnblogs.com/sharpest/p/5309052.html

你可能感兴趣的文章
kafka性能测试
查看>>
现实世界的Windows Azure:h.e.t软件使用Windows Azure削减50%的成本
查看>>
深入.net框架
查看>>
聚合类新闻client产品功能点详情分析
查看>>
js设置定时器
查看>>
数据库除运算
查看>>
LeetCode--112--路径总和
查看>>
DeviceIOControl与驱动层 - 缓冲区模式
查看>>
感悟贴2016-05-13
查看>>
vim使用教程
查看>>
JDK在LINUX系统平台下的部署案例与总结
查看>>
跨vlan通信-----单臂路由技术
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)
查看>>
C++多态、继承的简单分析
查看>>
库克称未来苹果用户可自己决定是否降频 网友:你是在搞笑吗?
查看>>
6倍性能差100TB容量,阿里云POLARDB咋实现?
查看>>
linux 安装 MySQLdb for python
查看>>
Sublime Text 2 技巧
查看>>