An open API service indexing awesome lists of open source software.

https://github.com/javaobjects/demo_springmvc_validate

springMVC服务端数据校验如何实现
https://github.com/javaobjects/demo_springmvc_validate

Last synced: 5 months ago
JSON representation

springMVC服务端数据校验如何实现

Awesome Lists containing this project

README

          

# 64-Java-springMVC服务端数据校验如何实现?

1. 新建一个动态web工程 命名 **demo_springMVC_validate**

![](64-Images/1.png)

2. 导入对应的jar包并添加到内路径

![](64-Images/2.png)

![](64-Images/3.png)

3. 导入对应的配置文件

![](64-Images/4.png)

**springmvc-servlet.xml**

```











classpath:customerValidationMessages








```

**web.xml**

```

demo_springMVC_helloworld

springmvc
org.springframework.web.servlet.DispatcherServlet


springmvc
*.do


index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

```

4. 新建包 **net.ptcs.demo.controller**

![](64-Images/5.png)

5. 新建Jsp页面 **add_book.jsp**

![](64-Images/6.png)

```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

添加图书页面



${e.defaultMessage}


bookId:
bookName:
intoStoreTime:
publishName:
price:

```
此时报错信息如下:

![](64-Images/7.png)

```
Multiple annotations found at this line:
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java
Build Path
- Line breakpoint:add_book.jsp [line: 1]
```
**解决方法:**
项目右键 ----> Configure Build Path -----> Java Build Path ---> Add Library ---> Server RunTime ----> Next ---> Apache Tomcat v8.0 ---> Finish ---> Apply ---> Apply and close

![](64-Images/8.png)
![](64-Images/9.png)
![](64-Images/10.png)

最后成功解决咯报错,如图所示

![](64-Images/11.png)

6. 新建一个 **Book** 实体类

![](64-Images/12.png)

```
package net.ptcs.demo.entity;

import java.util.Date;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class Book {
/*bookId:非空校验,整数校验,大于0的校验
* bookName:非空校验,不能有非法字符(符合书名的正则表达式规范)
* intoStoreTime:非空校验
* publishName:非空校验,不能有非法字符(符合出版社名的正则表达式规范)
* price:非空校验,大于0,小数校验*/

@NotNull(message="{book.bookId.isNull}")
private Integer bookId;
@NotBlank(message="{book.bookName.isNull}")
@Size(min=3,max=40,message="{book.bookName.size}")
private String bookName;
@NotNull(message="{book.intoStoreTime.isNull}")
private Date intoStoreTime;
@NotBlank(message="{book.publishName.isNull}")
private String publishName;


@Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
@NotBlank(message = "手机号码不能为空")
private String phone;


@NotNull(message="{book.price.isNull}")//对于数字校验是否为空使用@NotNull,String类型使用@NotBlank list类型使用@NotEmpty
@Digits(fraction = 2, integer = 100, message="{book.price.error}")//对于小数进行校验,限定整数数位integer和小数数位fraction
@DecimalMin(value = "0", message="{book.price.value}")//对值进行校验,必须大于等于value的值
private Double price;

public Book() {
super();
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

@Override
public String toString() {
return "Book [bookId=" + bookId + ", bookName=" + bookName
+ ", intoStoreTime=" + intoStoreTime + ", publishName="
+ publishName + ", price=" + price + "]";
}

public Book(Integer bookId, String bookName, Date intoStoreTime,
String publishName, Double price) {
super();
this.bookId = bookId;
this.bookName = bookName;
this.intoStoreTime = intoStoreTime;
this.publishName = publishName;
this.price = price;
}

public Integer getBookId() {
return bookId;
}

public void setBookId(Integer bookId) {
this.bookId = bookId;
}

public String getBookName() {
return bookName;
}

public void setBookName(String bookName) {
this.bookName = bookName;
}

public Date getIntoStoreTime() {
return intoStoreTime;
}

public void setIntoStoreTime(Date intoStoreTime) {
this.intoStoreTime = intoStoreTime;
}

public String getPublishName() {
return publishName;
}

public void setPublishName(String publishName) {
this.publishName = publishName;
}

public Double getPrice() {
return price;
}

public void setPrice(Double price) {
this.price = price;
}
}
```
7. 在 net.ptcs.demo.controller 内下新建 BookController类

```
package net.ptcs.demo.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;

import net.ptcs.demo.entity.Book;

/**
* 图书管理模块的控制器,也叫做处理器
*

Title: BookController


*

Description:


* @author xianxian
* @date 2019年6月25日
*/

@Controller
@RequestMapping("book")
public class BookController {
/**
* use:处理页面添加图书的请求
*
* 今天我们的需求:
* 1.在处理添加图书请求前对book对象中的属性进行校验:
* bookId:非空校验,整数校验,大于0的校验
* bookName:非空校验,不能有非法字符(符合书名的正则表达式规范)
* intoStoreTime:非空校验
* publishName:非空校验,不能有非法字符(符合出版社名的正则表达式规范)
* price:非空校验,大于0,小数校验
*
* 2.校验的时机:addBook方法调用之前校验,如果校验通过那么继续,没有通过那么返回页面,提示出错信息
*
* @param book
* @return
*/
@RequestMapping("addBook.do")
public String addBook(@Validated Book book,BindingResult bindingResult,Model model)
{
List errors=bindingResult.getAllErrors();

if(errors.size()>0)
{
//校验失败
// 把出错信息传给页面
model.addAttribute("errors", errors);
model.addAttribute("book", book);
return "add_book";// /+add_book+.jsp
}else
{
//校验成功
System.out.println("into addBook()方法。。。。。");
System.out.println("book:"+book);
return "";
}
}
}
```

8. **src** 目录下新建一个 **customerValidationMessages.properties**

```
book.bookId.isNull=\u56FE\u4E66\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
book.bookName.isNull=\u56FE\u4E66\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
book.intoStoreTime.isNull=\u5165\u5E93\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A
book.publishName.isNull=\u51FA\u7248\u793E\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
book.price.isNull=\u4EF7\u683C\u4E0D\u80FD\u4E3A\u7A7A
book.bookName.size=\u56FE\u4E66\u540D\u79F0\u957F\u5EA6\u6700\u5C0F\u662F3\uFF0C\u6700\u5927\u662F40
book.price.isNull=\u4E66\u7684\u4EF7\u683C\u4E0D\u80FD\u4E3A\u7A7A
book.price.error=\u4E66\u7684\u4EF7\u683C\u683C\u5F0F\u9519\u8BEF
book.price.value=\u4E66\u7684\u4EF7\u683C\u5FC5\u987B\u5927\u4E8E0
```
9. 新建 net.ptcs.demo.converter 包下的 CustomerDateConverter 类

```
package net.ptcs.demo.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class CustomerDateConverter implements Converter {
@Override
public Date convert(String source) {
Date date=null;
if(source!=null && !"".equals(source))
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
date=sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
}
```
10. 运行并测试

出现如下报错:

![](64-Images/13.png)

**原因:**

springmvc-servlet.xml 中的 value 值与配置文件名不一致

![](64-Images/14.png)

**解决:**

```
将这两名字更改为统一
```
**如图所示,测试成功**

![](64-Images/15.png)

**以就就是我关于 Java-springMVC服务端数据校验如何实现? 知识点的整理与总结的全部内容 [另附源码链接](https://github.com/javaobjects/demo_springMVC_validate)**

==================================================================
#### 分割线
==================================================================

**博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。**

![](https://upload-images.jianshu.io/upload_images/5227364-0824589594f944c7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)