springboot-@valid+@bingdingResult進行controller參數校驗

項目代碼已上傳至github:https://github.com/snowlavenderlove/springbootValidator.git

1.創建數據庫spring_validator,並建表user,表結構如圖

2.通過https://start.spring.io/官網創建項目springbootValidator,項目結構如圖,創建項目教程可參考博文:https://blog.csdn.net/qq_37231511/article/details/90669242

3.pom.xml中添加logging/druid/validator依賴,此處放全

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xue</groupId>
	<artifactId>springbootValidator</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springbootValidator</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.0</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
		    <groupId>commons-logging</groupId>
		    <artifactId>commons-logging</artifactId>
		    <version>1.2</version>
		</dependency>
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>druid</artifactId>
		    <version>1.1.17</version>
		</dependency>
		<dependency>
		    <groupId>org.hibernate.validator</groupId>
		    <artifactId>hibernate-validator</artifactId>
		    <version>6.0.16.Final</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

4.通過generator-mybatis創建代碼,教程可見博文:https://blog.csdn.net/qq_37231511/article/details/90692784,創建完後放到項目中如圖:

 

5.編輯application.properies文件

 

#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring_validator
spring.datasource.username=root
spring.datasource.password=123456

#druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#dao
mybatis.type-aliases-package==com.xue.repository.dao
mybatis.mapper-locations=classpath*:com/xue/repository/mapper/*.xml

6.在entity下創建包http,並創建UserReqBean和UserResBean,代碼分別爲:

package com.xue.entity.http;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

public class UserReqBean {
	/**
	 * 在實體類上寫上相關驗證信息
	 */
    private Integer id;
    @NotEmpty(message = "用戶名不能爲空!")
    private String name;
    @Size(min=3,max=10,message = "密碼長度在3到10位")
    private String pwd;

    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 == null ? null : name.trim();
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd == null ? null : pwd.trim();
    }

	@Override
	public String toString() {
		return "UserReqBean [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
	}
    
    

}
package com.xue.entity.http;

public class UserResBean {
	
    private Integer id;

    private String name;

    private String pwd;

    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 == null ? null : name.trim();
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd == null ? null : pwd.trim();
    }


}

 7.創建controller包,新建UserController

package com.xue.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.xue.entity.http.UserReqBean;
import com.xue.entity.http.UserResBean;
import com.xue.service.UserService;

@Controller
public class UserController {
	
	@Autowired
	private UserService userService;
	
	@RequestMapping("/loginHtml")
	public String loginHtml(){
		
		return "loginHtml";
	}
	
	@RequestMapping("/registerHtml")
	public String registerHtml(){
		
		return "registerHtml";
	}
	/**
	 * 注意的是@Valid 和 BindingResult 是一 一對應的
	 * 如果有多個@Valid,那麼每個@Valid後面都需要添加BindingResult用於接收bean中的校驗信息
	 */
	
	@RequestMapping("/login")
	@ResponseBody
	public String login(@Valid @RequestBody UserReqBean inparam,BindingResult bingdingResult){
		
		if(bingdingResult.hasErrors()){
			List<ObjectError> ls=bingdingResult.getAllErrors();  
            for (int i = 0; i < ls.size(); i++) {  
                System.out.println("error:"+ls.get(i));  
            }
		}
		
		UserResBean res = userService.login(inparam);
		
		System.out.println(inparam);
		
		if(null != res){
			return "登陸成功,用戶名:"+res.getName()+"   密碼"+res.getPwd();
		}else{
			return "登陸失敗";
		}
		
		
	}
	/**
	 * 注意的是@Valid 和 BindingResult 是一 一對應的
	 * 如果有多個@Valid,那麼每個@Valid後面都需要添加BindingResult用於接收bean中的校驗信息
	 */
	@RequestMapping("/register")
	@ResponseBody
	public String register(@Valid @RequestBody UserReqBean inparam,BindingResult bingdingResult){
		
		System.out.println("進入入口--------------------------");
		
		if(bingdingResult.hasErrors()){
			List<ObjectError> ls=bingdingResult.getAllErrors();  
            for (int i = 0; i < ls.size(); i++) {  
                System.out.println("error:"+ls.get(i));  
            }
		}
		
		int result = userService.register(inparam);
		
		if(0 != result){
			return "註冊成功";
			
		}else{
			return "註冊失敗";
		}
		
		
	}
	



}

8.創建service包,創建UserService接口與UserServiceImpl實現類,代碼分別爲

package com.xue.service;

import com.xue.entity.http.UserReqBean;
import com.xue.entity.http.UserResBean;

public interface UserService {
	
//	增
	
	public int register(UserReqBean user);
//  查
	
	public UserResBean login(UserReqBean user);

}

 

package com.xue.service.Impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xue.entity.http.UserReqBean;
import com.xue.entity.http.UserResBean;
import com.xue.entity.model.User;
import com.xue.repository.dao.UserMapper;
import com.xue.service.UserService;
@Service
public class UserServiceImpl implements UserService {
	
	@Autowired
	private UserMapper userMapper;

	@Override
	public int register(UserReqBean data) {
		
		int result = 0;
		
		User user = new User();
		user.setName(data.getName());
		user.setPwd(data.getPwd());
		
		try {
			result = userMapper.insertUser(user);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return result;
	}

	@Override
	public UserResBean login(UserReqBean data) {
		UserResBean res = null;
		res = new UserResBean();
		User user = null;
		Map<String,Object> params = new HashMap<String,Object>();
		
		params.put("name", data.getName());
		
		params.put("pwd", data.getPwd());
		
		
		try {
			 user = userMapper.selectUser(params);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		if(null != user){
			res.setName(user.getName());
			res.setPwd(user.getPwd());
			
			return res;
		}
		
		
		
		return res;
	}
	
	

}

9.編輯UserMapper.java,在代碼最後添加

    int insertUser(User user);
    
    User selectUser(Map<String,Object> inparams);

 10.編輯UserMapper.xml,在代碼最後添加

  <select id="selectUser" parameterType="com.xue.entity.model.User" resultMap="BaseResultMap">
	select name,pwd from user where name =#{name} and pwd = #{pwd}
  </select>
  <insert id="insertUser" parameterType="com.xue.entity.model.User">
	insert into user(name,pwd) values(#{name},#{pwd})
  </insert>

 11.代碼到此結束,最終項目結構爲

12.通過後臺接口測試軟件輸入正常的數據進行測試register接口

 13.通過後臺接口測試軟件輸入不符合規則的數據進行測試register接口,如圖:後臺打印出了信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章