Spring MVC 表单校验 (七)

完整的项目案例: springmvc.zip

目录

 

实例

除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)和hibernate-validator(表单验证)

<!--表单验证-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>

项目结构:

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 请求总控器 -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
View Code

配置dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="edu.nf.ch07.controller"/>

    <mvc:annotation-driven/>

    <mvc:default-servlet-handler/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
View Code
请求控制器UserController:
package edu.nf.ch07.controller;

import entity.Users;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import vo.ResponseVO;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * @author wangl
 * @date 2018/11/1
 */
@Controller
public class UserController {

    /**
     * 使用@Valid注解对Bean进行校验,
     * 当校验不通过的时候,会有异常和相应的提示信息返回,
     * 这些信息回绑定到一个BindingResult的对象中,因此
     * 我们可以从这个对象中获取校验信息
     * @param user
     * @return
     */
    @PostMapping("/add")
    @ResponseBody
    public ResponseVO add(@Valid Users user, BindingResult result){
        //如果有错误消息,则获取字段的message的信息
        ResponseVO vo = new ResponseVO();
        if(result.hasErrors()){
            List<String> messages = new ArrayList<>();
            List<FieldError> list = result.getFieldErrors();
            for (FieldError fieldError : list) {
                System.out.println(fieldError.getDefaultMessage());
                messages.add(fieldError.getDefaultMessage());
            }
            vo.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            vo.setValue(messages);
            return vo;
        }
        vo.setMessage("success");
        return vo;
    }
}

vo响应视图:

package vo;

import org.springframework.http.HttpStatus;

/**
 * @author wangl
 * @date 2018/11/1
 * 统一视图响应对象
 */
public class ResponseVO {

    /**
     * 响应状态码
     */
    private Integer code = HttpStatus.OK.value();
    /**
     * 提示消息
     */
    private String message;
    /**
     * 响应数据
     */
    private Object value;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "ResponseVO{" +
                "code=" + code +
                ", message='" + message + '\'' +
                ", value=" + value +
                '}';
    }
}

前台页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
    <h1>注册用户</h1>
    <div id="msg" style="color: red"></div>
    <form id="f1">
        Name:<input type="text" name="userName"/><br>
        Age:<input type="text" name="age"/><br>
        Email:<input type="text" name="email"/><br>
        <input type="button" value="submit"/>
    </form>
    <script>
        $(function(){
            $(':button').on('click',function(){
                $.ajax({
                    url: 'add',
                    type: 'post',
                    data: $('#f1').serialize(),
                    success: function(data){
                        if(data.code == 200) {
                            alert(data.message);
                        }else{
                            $.each(data.value, function(index,val){
                                $('#msg').append(val+"<br>");
                            });
                        }
                    }
                });
            })
        });
    </script>
</body>
</html>

实体类Users

package entity;

import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * @author wangl
 * @date 2018/11/1
 * 使用相应的注解来制定校验规则
 */
public class Users {
    /**
     * 内容不能为空,字符串或集合的内容不允许为空
     */
    @NotEmpty(message = "请输入用户名")
    private String userName;
    /**
     * 引用或值不能为null
     */
    @NotNull(message = "请输入年龄")
    @Min(value = 18, message = "年龄不得小于18岁")
    private Integer age;
    @NotEmpty(message = "请填写Email地址")
    @Email(message = "请填写有效的Email地址")
    private String email;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

 

 


posted @ 2018-11-07 19:32  黄浩#  阅读(208)  评论(0编辑  收藏  举报