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>

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐