SpringMVC数据格式化:@DateTimeFormat与@NumberFormat的使用
一、数据格式化
–
数据格式化是对数据进行规范化的一种处理方式,它在一定程度上规范了前端传来的数据信息,方便后台对数据进行进一步处理,SpringMVC可以通过注解形式实现数据格式化
二、步骤
1.配置xml
代码如下:
<!-- 配置数据格式化注解所需要的bean -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
</bean>
2.@DateTimeFormat:将String转换成Date
实体类(示例):
package com.lanqiao.entity;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
public class Student {
private int id;
private String name;
@DateTimeFormat(pattern = "yyyy-MM-dd")//格式化前台传递来的数据。将前台传的数据的格式固定为yyyy-MM-dd
private Date birthday;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int id, String name, Date birthday) {
super();
this.id = id;
this.name = name;
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
其中为Date对象添加@DateTimeFormat注解
@DateTimeFormat(pattern = "yyyy-MM-dd")//格式化前台传递来的数据。将前台传的数据的格式固定为yyyy-MM-dd
private Date birthday;
3.测试
前端:
<!-- 测试数据格式化 -->
<form action="testDateTimeFormat" method="get" >
编号:<input type="text" name="id" ><br>
姓名:<input type="text" name="name"><br
出生日期:<input type="text" name="birthday"><br>
<input type="submit" value="修改"/>
</form>
Controller:
//测试数据格式化
@RequestMapping(value = "testDateTimeFormat")
public String testDateTimeFormat(Student student,BindingResult result) {
if(result.getErrorCount()>0) {
for(FieldError error:result.getFieldErrors()) {
System.out.println("error:"+error.getDefaultMessage());
}
}
System.out.println(student.getId()+","+student.getName()+","+student.getBirthday());
return "success";
}
效果:
如果我们没有按照"yyyy-MM-dd"规定格式输入,则会报错
错误信息:
error:Failed to convert property value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birthday’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.util.Date] for value ‘2021/04/04’; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2021/04/04]
4.@NumberFormat:将String转换为int
对数字格式化需要添加注解 @NumberFormat
@NumberFormat(pattern = "#,###")
private int id;
前端:
控制台:
可以看出:
@NumberFormat自动将String类型在规则限制下转换为int类型