平时开发过程中,经常要用到参数校验,如果直接在代码逻辑里面写参数校验,代码有点冗余且用起来不是非常方便,显得代码逻辑复杂且重复代码太多,这里我们使用注解的方式进行参数校验,SpringBoot中常用的用于参数校验的注解如下:

@AssertFalse 所注解的元素必须是Boolean类型,且值为false
@AssertTrue 所注解的元素必须是Boolean类型,且值为true
@DecimalMax 所注解的元素必须是数字,且值小于等于给定的值
@DecimalMin 所注解的元素必须是数字,且值大于等于给定的值
@Digits 所注解的元素必须是数字,且值必须是指定的位数
@Future 所注解的元素必须是将来某个日期
@Max 所注解的元素必须是数字,且值小于等于给定的值
@Min 所注解的元素必须是数字,且值小于等于给定的值
@Range 所注解的元素需在指定范围区间内
@NotNull 所注解的元素值不能为null
@NotBlank 所注解的元素值有内容
@Null 所注解的元素值为null
@Past 所注解的元素必须是某个过去的日期
@PastOrPresent 所注解的元素必须是过去某个或现在日期
@Pattern 所注解的元素必须满足给定的正则表达式
@Size 所注解的元素必须是String、集合或数组,且长度大小需保证在给定范围之内
@Email 所注解的元素需满足Email格式

1、在GitEgg-Platform工程的子工程gitegg-platform-boot里添加spring-boot-starter-validation依赖,因为自SpringBoot2.3.X开始spring-boot-starter-web默认不再引入校验框架,这里需要手动引入,pom.xml如下

<!--?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">
<parent>
<artifactid>GitEgg-Platform</artifactid>
<groupid>com.gitegg.platform</groupid>
<version>1.0-SNAPSHOT</version>
</parent>
<modelversion>4.0.0</modelversion> <artifactid>gitegg-platform-boot</artifactid>
<name>${project.artifactId}</name>
<version>${project.parent.version}</version>
<packaging>jar</packaging> <dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
<optional>true</optional>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-validation</artifactid>
</dependency>
<dependency>
<groupid>com.gitegg.platform</groupid>
<artifactid>gitegg-platform-swagger</artifactid>
<optional>true</optional>
</dependency>
</dependencies> </project>

2、GitEgg-Platform工程重新install,在GitEgg-Cloud工程的子工程gitegg-service-system里面新建类SystemDTO.java

package com.gitegg.service.system.dto;

import lombok.Data;

import javax.validation.constraints.*;

@Data
public class SystemDTO { @NotNull
@Min(value = 10, message = "id必须大于10")
@Max(value = 150, message = "id必须小于150")
private Long id; @NotNull(message = "名称不能为空")
@Size(min = 3, max = 20, message = "名称长度必须在3-20之间")
private String name;
}

3、SystemController.java类里面添加参数校验测试接口

package com.gitegg.service.system.controller;

import com.gitegg.platform.boot.common.base.Result;
import com.gitegg.platform.boot.common.exception.BusinessException;
import com.gitegg.service.system.dto.SystemDTO;
import com.gitegg.service.system.service.ISystemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @RestController
@RequestMapping(value = "system")
@AllArgsConstructor
@Api(tags = "gitegg-system")
public class SystemController { private final ISystemService systemService; @GetMapping(value = "list")
@ApiOperation(value = "system list接口")
public Object list() {
return systemService.list();
} @GetMapping(value = "page")
@ApiOperation(value = "system page接口")
public Object page() {
return systemService.page();
} @GetMapping(value = "exception")
@ApiOperation(value = "自定义异常及返回测试接口")
public Result<string> exception() {
return Result.data(systemService.exception());
} @PostMapping(value = "valid")
@ApiOperation(value = "参数校验测试接口")
public Result<systemdto> valid(@Valid @RequestBody SystemDTO systemDTO) {
return Result.data(systemDTO);
}
}

4、运行GitEggSystemApplication.java,打开浏览器访问:http://127.0.0.1:8001/doc.html,然后点击左侧的参数校验测试接口,使用Swagger2进行测试,即可查看校验结果



5、这里的提示信息用到了上一章节讲到的统一异常处理逻辑:

    /**
* 非法请求-参数校验
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public Result handlerMethodArgumentNotValidException(MethodArgumentNotValidException methodArgumentNotValidException) {
//获取异常字段及对应的异常信息
StringBuffer stringBuffer = new StringBuffer();
methodArgumentNotValidException.getBindingResult().getFieldErrors().stream()
.map(t -> t.getField() + t.getDefaultMessage() + ";")
.forEach(e -> stringBuffer.append(e));
String errorMessage = stringBuffer.toString();
Result result = Result.error(ResultCodeEnum.PARAM_VALID_ERROR, errorSystem + errorMessage);
return result;
}

本文源码在https://gitee.com/wmz1930/GitEgg的chapter-08分支。

最新文章

  1. Ansible-playbook批量部署,更新war脚本,可以再完善----后续再update
  2. XML创建与解析常用方法介绍
  3. PHP操作MongoDB学习笔记
  4. iOS10适配及Xcode8配置
  5. Python 定制类与其对象的创建和应用
  6. Excel Xll开发资料
  7. 对Cost (%CPU) 粗略的理解
  8. mysql 服务器ip连接统计
  9. android 更新uI主线程
  10. Do&#39;s and Don&#39;ts for Android development
  11. [转载]解析WINDOWS中的DLL文件---经典DLL解读
  12. bootcss
  13. Inno Setup入门(十二)&mdash;&mdash;Pascal脚本(1)
  14. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
  15. nginx+keepalived高可用及双主模式
  16. NOIP2018退役记(记事)
  17. atoi 和 itoa的实现
  18. LOJ.6282.数列分块入门6(块状链表/分块)
  19. linux下清空c++ cin无效流的方式
  20. C/C++程序编译流程

热门文章

  1. 记录一下Vray5中文汉化版本中导出EXR或vrimg多通道文件的那些坑和解决方法
  2. Model 特性
  3. AntDesign VUE:Model组件的Button的事件this指向undefined的问题(箭头函数)
  4. Python - poetry(2)命令介绍
  5. Weblogic漏洞分析之JNDI注入-CVE-2020-14645
  6. 再谈java线程
  7. 理解MySQL回表
  8. Django学习day08随堂笔记
  9. 在PHP中灵活使用foreach+list处理多维数组
  10. django错误处理