平时开发过程中,常常要用到参数校验,如果间接在代码逻辑外面写参数校验,代码有点冗余且用起来不是十分不便,显得代码逻辑简单且反复代码太多,这里咱们应用注解的形式进行参数校验,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.*;@Datapublic 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分支。