美文网首页软件技术方案
Springboot请求参数校验

Springboot请求参数校验

作者: js_hz | 来源:发表于2020-05-31 12:52 被阅读0次

前端提交的请求参数需要进行校验,如果使用if else语句校验,比较繁琐。使用@Valid和@Validated注解很好的解决了这个问题。

@Valid和@Validated的区分

@Validated是@Valid 的一次封装,是Spring提供的。

@Valid不提供分组功能。

@Validated不提供嵌套验证功能。嵌套验证需要在对应的嵌套属性前加@Valid。

实例类增加验证注解

@Data
public class Person {

    @NotEmpty(message = "姓名不能为空")
    private String name;

    @Max(value = 18, message = "年龄不能超过18岁")
    private String age;

    @Max(value = 1, message = "性别只能为0和1: 0=女1=男")
    @Min(value = 0, message = "性别只能为0和1: 0=女1=男")
    private Short sex;

}

Controller方法

@RestController
@Slf4j
public class VerifyController {

    @PostMapping(value = "/valid")
    public void verifyValid(@Valid @RequestBody Person person) {
        log.info("valid() method, the request params is: {}", JSON.toJSONString(person));
    }

    @PostMapping(value = "/validated")
    public void verifyValidated(@Validated @RequestBody Person person) {
        log.info("validated() method, the request params is: {}", JSON.toJSONString(person));
    }
}

定义一个全局异常类,统一抓取异常

@ControllerAdvice
@ResponseBody
public class GlobleExceptionHandler {
    /**
     * 要拦截的异常Exception
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result<?> parameterExceptionHandler(MethodArgumentNotValidException e) {
        BindingResult exceptions = e.getBindingResult();
        // 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
        if (exceptions.hasErrors()) {
            List<ObjectError> errors = exceptions.getAllErrors();
            if (!errors.isEmpty()) {
                FieldError fieldError = (FieldError) errors.get(0);
                return ResultGenerator.genErrorResult("-1", fieldError.getDefaultMessage());
            }
        }
        return ResultGenerator.genErrorResult("error");
    }
}

测试接口校验

image

附:注解说明

@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

相关文章

  • Springboot请求参数校验

    前端提交的请求参数需要进行校验,如果使用if else语句校验,比较繁琐。使用@Valid和@Validated注...

  • SpringBoot参数校验和国际化使用

    一、参数校验 springboot 使用校验框架validation校验方法的入参 SpringBoot的Web组...

  • 7.从零搭建WebApi接口开发框架-请求参数校验

    日常开发中,前端会对请求参数进行校验,为了保证请求参数的格式正确,也需要在服务端做参数校验。服务端参数校验用的是H...

  • 服务-短信验证码校验接口

    验证码校验接口 URL : /sys/sms_verification/result 请求参数 : 请求参数例...

  • SpringBoot 参数校验

    在后端开发的过程中,验证前端参数的合法性是一个必不可少的步骤。但是参数验证会产生大量的样板代码,导致代码可读性差。...

  • SpringBoot参数校验

    参数校验在项目中是很常见的。SpringBoot使用 @Valid注解 + BindingResult 来实现参数...

  • SpringBoot 参数校验

    在web项目开发过程中,参数的校验是十分重要的。入参少的情况下使用if else即可处理,但是入参多而的情况下if...

  • springboot 参数校验

    https://reflectoring.io/bean-validation-with-spring-boot/...

  • springboot参数校验

    概述 使用spring validation可以对用户输入参数进行校验,用户参数可以是一个bean,也可以是简单数...

  • 接口开发规范

    1、鉴权2、请求参数缺失、规范校验

网友评论

    本文标题:Springboot请求参数校验

    本文链接:https://www.haomeiwen.com/subject/hwblzhtx.html