spring|spring boot输入数据校验(validation)的实现过程
项目内容
实现一个简单的用户注册接口,演示怎样进行数据校验。
要求
- JDK1.8或更新版本
- Eclipse开发环境
项目创建 创建spring boot项目
打开Eclipse,创建spring boot的spring starter project项目,选择菜单:
File > New > Project ...
,弹出对话框,选择:Spring Boot > Spring Starter Project
,在配置依赖时,勾选web
,完成项目创建。【spring|spring boot输入数据校验(validation)的实现过程】
文章图片
项目依赖 pom.xml的内容
4.0.0 org.springframework.boot spring-boot-starter-parent2.1.1.RELEASE com.qikegu springboot-validation-demo0.0.1-SNAPSHOT springboot-validation-demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtestorg.springframework.boot spring-boot-maven-plugin
代码实现 项目目录结构如下图,添加了几个类,下面将详细介绍。
文章图片
创建
RegisterRequest
类用户注册时,要求输入手机号、密码、昵称,创建RegisterRequest类来接受前端传过来的数据,同时校验数据,校验都是通过注解的方式实现。
public class RegisterRequest { @SuppressWarnings("unused") private static final org.slf4j.Logger log = LoggerFactory.getLogger(RegisterRequest.class); @NotNull(message="手机号必须填") @Pattern(regexp = "^[1]([3][0-9]{1}|59|58|88|89)[0-9]{8}$", message="账号请输入11位手机号") // 手机号 private String mobile; @NotNull(message="昵称必须填") @Size(min=1, max=20, message="昵称1~20个字") private String nickname; @NotNull(message="密码必须填")@Size(min=6, max=16, message="密码6~16位") private String password; public String getMobile() {return mobile; } public void setMobile(String mobile) {this.mobile = mobile; } public String getNickname() {return nickname; } public void setNickname(String nickname) {this.nickname = nickname; } public String getPassword() {return password; } public void setPassword(String password) {this.password = password; }}
说明
RegisterRequest
类有3个成员变量:mobile
,nickname
, password
,这些变量都带有注解:- @NotNull 表示必填
- @Size 字符串长度必须符合指定范围
- @Pattern 输入字符串必须匹配正则表达式
AuthController
控制器类,实现一个用户注册的接口:package com.qikegu.demo.controller; import javax.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.qikegu.demo.common.util.MiscUtil; import com.qikegu.demo.common.util.Result; import com.qikegu.demo.model.RegisterRequest; @RestController@RequestMapping("/auth")public class AuthController { @RequestMapping(value = "https://www.it610.com/register", method = RequestMethod.POST, produces="application/json")public ResponseEntityregister(@Valid @RequestBody RegisterRequest register, BindingResult bindingResult) {if(bindingResult.hasErrors()) { //rfc4918 - 11.2. 422: Unprocessable Entity//res.setStatus(422); //res.setMessage("输入错误"); //res.putData("fieldErrors", bindingResult.getFieldErrors()); Result res1 = MiscUtil.getValidateError(bindingResult); return new ResponseEntity (res1, HttpStatus.UNPROCESSABLE_ENTITY); }Result res = new Result(200, "ok"); return ResponseEntity.ok(res); }}
说明
方法register有2个参数
@Valid @RequestBody RegisterRequest register
@RequestBody 表明输入来自请求body,@Valid表明在绑定输入时作校验BindingResult bindingResult
这个参数存放校验结果
直接返回bindingResult过于复杂,使用MiscUtil.getValidateError简化校验结果
static public Result getValidateError(BindingResult bindingResult) {if(bindingResult.hasErrors() == false) return null; Map fieldErrors = new HashMap(); for(FieldError error : bindingResult.getFieldErrors()){fieldErrors.put(error.getField(), error.getCode() + "|" + error.getDefaultMessage()); }Result ret = new Result(422, "输入错误"); //rfc4918 - 11.2. 422: Unprocessable Entityret.putData("fieldErrors", fieldErrors); return ret; }
Result是结果封装类,[spring boot 接口返回值封装] 那一篇中已经介绍过。
运行 Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:
run as -> spring boot app
运行程序。 打开Postman访问接口,运行结果如下:输入错误的情况
文章图片
输入正确的情况
文章图片
总结 完整代码
到此这篇关于spring boot输入数据校验(validation)的文章就介绍到这了,更多相关spring boot数据校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- Node.js中readline模块实现终端输入
- 解决SpringBoot引用别的模块无法注入的问题
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina
- springboot使用redis缓存
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了