SpringMVC—数据格式化

定义

数据格式化也属于类型转换的范畴。
Spring在格式化模块中定义了一个实现ConversionService接口FormattingConversionService实现类,该实现类即有类型转换的功能,也有格式化的功能。这个实现类拥有一个工厂FormattingConversionServiceFactoryBean工厂类,该工厂类就是用于Spring中构造FormattingConversionService实现类的。
该工厂类已经在内部注册了:
- @NumberFormat注解:用于进行数字类型的格式化
- @DateFormat注解:用来进行日期类型的格式化(可以解决字符串转换为Date类型的问题

例题:Student中加入salary和birthday属性,需要对工资和生日进行格式化

  • Student中加入salary和birthday属性,并且制定格式化类型
public class Student {
	
	private String name;
	private String sex;
	private Integer age;
	
	@NumberFormat(pattern="#,###,###.#")
	private Double salary;
	
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birthday;
	
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", salary=" + salary + ", birthday="
				+ birthday + "]";
	}
}
  • springmvc.xml配置
 <!-- 
	  mvc:annotation-driven : 开启对springmvc注解的支持
	  	conversion-service : 配置SpringMVC上下文中中的类型转换器
	  		- 不配置:使用默认的
	  		- 配置:默认的+配置的
	   -->
	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
	
	<!-- 配置ConversionServiceFactoryBean -->
	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
			<!-- 自己定义的类型转换 -->
				<bean class="com.nhkj.util.StringToStudentConverter"></bean>
			</set>
		</property>
	</bean>

解决字符串转换为Date类型的问题

方法一:数据格式化

注意:前端传输的时间字符串格式要和注解指定的格式一致,不然会报错。

		@RequestMapping("/testStringToDate")
		public String testStringToDate(@DateTimeFormat(pattern="yyyy-MM-dd") Date birthday) {
			System.out.println(birthday);
			
			return "success";
		}

方法二:自定义类型转换器

  • 编写自定义类型转换器
public class StringToDateConverter implements Converter<String, Date>{

	@Override
	public Date convert(String arg0) {
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		
		if(arg0 == null) {
			throw new NullPointerException("请输入要转换的日期");
		}
		
		try {
			Date date = format.parse(arg0);
			
			return date;
		} catch (ParseException e) {
			throw new RuntimeException("输入日期有误");
		}
	}

}
  • springmvc.xml配置文件
<!-- 配置类型转换工厂 -->
	<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<!-- 给工厂注入一个新的类型转换器 -->
		<property name="converters">
			<array>
				<!-- 配置之定义的类型转换器 -->
				<bean class="com.nhkj.util.StringToDateConverter"></bean>
			</array>
		</property>
	</bean>
	<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>
	

测试

	/**
     * 转换时间类型
	 * @param date
	 * @return
	 */
	@RequestMapping("/testDate")
	public String testDate(Date date) {  //前端传2020-10-10
		System.out.println(date);
		return "success";
	}

猜你喜欢

转载自blog.csdn.net/qq_44866169/article/details/107390907