1、@DateTimeFormat
:设置日期格式,springmvc中默认的类型转换器是使用“/”作为分隔,若想要更改类型格式,只需在实体类日期属性上添加@DataTimeFormat("格式")
即可
在使用的时候需要注意,若自定义了类型转换器,则设置的日期可视化器就会失效,需要使用FormattingConversionServiceFactoryBean
对象才可正常使用
2、在进行数据校验时,可使用@NotNull
、@Length
、@Past
、@Email
注解,这是JSR303标准的校验框架,spring是支持的,需要引入pom依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>
@NotNull
:不能为空
@Length(min=*,max=*)
:设置长度
@Past
:设置日期只能为过去日期
@Email
:设置为邮箱格式
使用这些注解,只需要在实体类属性上面添加注解,但是在new该实体类的时候是不会自动使用的,需要在定义实体类前面加上@Valid
注解或者使用spring的注解@Validated
放在类最上面。
这里是代码部分
导入依赖在上方
实体类Person.java
public class Person {
//@NotNull:不允许为空
@NotNull
private Integer id;
//限制长度
@Length(min = 3,max = 9)
private String name;
private Integer age;
private String gender;
//@Past:日期只能填写过去日期
@Past
@DateTimeFormat(pattern = "yyyy-mm-dd")
private Date birth;
@Email
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", birth=" + birth +
", email='" + email + '\'' +
'}';
}
}
Controller请求映射
@Controller
//@Validated
public class ValidationController {
/**
* @Valid 设置实体类校验
*
*/
@RequestMapping("/validation")
public String validation(@Valid Person person, BindingResult bindingResult, Model model){
System.out.println(person);
Map<String,Object> map = new HashMap<String, Object>();
if(bindingResult.hasErrors()){
/**
* bindingResult.getFieldErrors():获取全部报错信息
*/
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
//遍历报错信息集合取出每一个
for (FieldError fieldError:fieldErrors) {
System.out.println(fieldError.getField());
System.out.println(fieldError.getDefaultMessage());
map.put(fieldError.getField(),fieldError.getDefaultMessage());
}
model.addAttribute("errorInfo",map);
System.out.println("登录失败");
return "forward:/login.jsp";
}else{
System.out.println("登录成功");
return "success";
}
}
}
xml文件配置
<!--添加自定义的类型转换器到ConversionServiceFactoryBean-->
<!--
使用默认的类型转换器,在输出日期的的时候必须使用/作为分隔
如果添加日期可视化器的话,需要在实体类上添加@DataTimeFormat("格式")
如果配置了自定义的类型转换器,又配置了日期可视化器,此时日期可视化器就是失效,需要使用FormattingConversionServiceFactoryBean对象
-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="myConverter"></ref>
</set>
</property>
</bean>
jsp文件
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2022/3/12
Time: 10:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
request.setAttribute("ctp",request.getContextPath());
%>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${ctp}/validation" method="post">
id: <input name="id" type="text">${errorInfo.id}<br>
name: <input name="name" type="text">${errorInfo.name}<br>
age: <input name="age" type="text">${errorInfo.age}<br>
gender:<input name="gender" type="text">${errorInfo.gender}<br>
birth: <input name="birth" type="text">${errorInfo.birth}<br>
email: <input name="email" type="text">${errorInfo.email}<br>
<input type="submit" value="修改">
</form>
</body>
</html>