0
点赞
收藏
分享

微信扫一扫

Elasticsearch:创建自定义 ES Rally tracks 的分步指南

三次方 02-21 16:00 阅读 4

https://beanvalidation.org/
在这里插入图片描述

Bean Validation中定义的注解:

注解详细信息
@Null被注释的元素必须为 null
@NotNull被注释的元素必须不为 null
@AssertTrue被注释的元素必须为 true
@AssertFalse被注释的元素必须为 false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@Pattern(value)被注释的元素必须符合指定的正则表达式

Hibernate validator 在JSR303的基础上对校验注解进行了扩展,扩展注解如下:

注解详细信息
@Email被注释的元素必须是电子邮箱地址
@Length被注释的字符串的大小必须在指定的范围内
@NotEmpty被注释的字符串的必须非空
@Range被注释的元素必须在合适的范围内

您需要在 pom.xml 文件中添加以下依赖项

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

您还需要使用验证注解来定义实体类。例如:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
    private String email;
}

然后创建一个相应的 DTO 类,并在其中使用验证注解,比如 UserDTO:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {
    @NotBlank(message = "name不能为空或者空格")
    @Size(min=3, max=9,message = "长度在3-9之间")
    private String name;

    @NotNull(message = "age不能为空")
    @Max(value=60,message = "年龄最大60")
    @Min(value=18,message = "年龄最小18")
    private Integer age;

    @NotNull
    @Email(message = "邮箱格式不正确")
    private String email;
}

在控制器中,您可以使用 @Validated 注解为请求体启用验证。例如:

@RestController
public class UserController {
    @PostMapping("/add")
    public String add(@Validated @RequestBody UserDTO userDTO) {
        User user = new User();
        BeanUtils.copyProperties(userDTO, user);
        return "注册成功";
    }
}

要全局处理验证错误,您可以使用 @RestControllerAdvice 和 @ExceptionHandler 注解创建一个全局异常处理器。例如:

@RestControllerAdvice
@Component
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {

    // 获取异常信息
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
    // 构建返回结果
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("code", "400");
        result.put("message", "参数校验失败");
        Map<String, Object> errors = new LinkedHashMap<>();
        allErrors.forEach(error -> errors.put(((FieldError) error).getField(), error.getDefaultMessage()));
        result.put("errors", errors);
        return result;
    }
}

用来启动web项目

@SpringBootApplication
public class ValidationApplication {
    public static void main(String[] args) {
        SpringApplication.run(ValidationApplication.class, args);
    }
}

postman测试

{   
    "name":"",
    "age":20,
    "email":"奇遇少年@163.com"
}

在这里插入图片描述

{   
    "name":"奇遇少年",
    "age":10,
    "email":"奇遇少年@163.com"
}

在这里插入图片描述

{   
    "name":"奇遇少年",
    "age":20,
    "email":"奇遇少年"
}

在这里插入图片描述

{   
    "name":"奇遇少年",
    "age":20,
    "email":"奇遇少年@163.com"
}

在这里插入图片描述

举报

相关推荐

0 条评论