(7)Spring Boot 参数校验统一封装响应格式

394 阅读2分钟

在 Spring Boot 项目中,我们经常需要对参数进行校验。为了保证代码的规范性和可维护性,我们可以将参数校验的结果进行统一封装,以便于返回给前端一个格式化的错误信息。

下面是一个统一封装参数校验错误信息的例子:

引入相关依赖

pom.xml 文件中引入 spring-boot-starter-validation 依赖,它包含了 JSR-303 的校验框架

        <!--validation-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

定义一个实体类

@Data
public class TestValidObj{
    @NotBlank(message = "账号不能为空")
    @ApiModelProperty(value = "账号")
    private String username;
    @ApiModelProperty(value = "密码")
    @NotBlank(message = "密码不能为空不能为空")
    @Size(min = 6,max = 20,message = "密码长度为6~20")
    private String password;
    @ApiModelProperty(value = "年龄")
    private Integer age;
}

RestExceptionHandler 加入参数校验异常监控

    /**
     * 参数校验异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public <T> DataResult<T> methodArgumentNotValidException(MethodArgumentNotValidException e){
        log.error("MethodArgumentNotValidException:{}",e);
        String message=e.getAllErrors()
                .stream()
                .map(ObjectError::getDefaultMessage)
                .collect(Collectors.joining(","));
       return DataResult.fail(ResponseCode.DATA_PARAM_ERROR.getCode(), message);
    }

测试

    @PostMapping("/test-valid")
    @ApiOperation(value ="参数校验测试接口")
    public TestValidObj testValidObj(@RequestBody @Valid TestValidObj obj){
        return obj;
    }

常用的注解

1681729383801.png

注解功能
@AssertFalse可以为null,如果不为null的话必须为false
@AssertTrue可以为null,如果不为null的话必须为true
@Digits(integer=, fraction=,message=)被注解的元素必须为一个数字,其值必须在可接受的范围内
@Max(value=,message=)被注解的元素必须为一个数字,其值必须小于等于指定的最大值
@Min(value=,message=)被注解的元素必须为一个数字,其值必须大于等于指定的最小值
@NotNull(message=)不能为null,可以是""
@Null(message=)必须为null
@Pattern(regexp=,message)必须满足指定的正则表达式
@Size(min=,max=,message=)集合、数组、map等的size()值必须在指定范围内
@Email(message=)必须是email格式
@NotBlank(message=)字符串不能为null,字符串trim()后也不能等于“”
@NotEmpty(message=)不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”
@Valid被注释的元素是一个对象,需要检查此对象的所有字段值