在Spring Boot中使用Jakarta Validation

1.概览

在大多数Java应用程序中,我们需要对用户的输入进行校验,确保输入的数据符合预期的定义和限制。Jakarta Bean Validation 2.0是一种十分强大的对JavaBean校验的框架。在这篇文章中,我们将了解如何使用它,并将它与SpringBoot集成。

2.使用

        (1) 创建一个springboot项目,可以使用idea快速构建springboot项目

        (2) 在pom.xml文件中引入akarta Bean Validation 2.0

<dependency>
	<groupId>jakarta.validation</groupId>
	<artifactId>jakarta.validation-api</artifactId>
</dependency>

          (3) 从springboot2.3x之后需要显示的引入spring-boot-starter-validation

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

3.一个简单javabean类 

项目的依赖添加完毕后,我们需要定义一个简单的实体类

@TableName("database_user")
public class UserEntity {
    @TableId
    private long id;

    @NotBlank(message = "Name is required")
    private String name;

    @NotBlank(message = "Email is required")
    private String email;

//constructor/tostring/setter/getter
}

 我们的这个UserEntity实现十分简陋,但它主要展示了使用BeanValidation注解来约束name和email字段。为了简化,我们仅仅使用@NotBlank来约束目标字段。我们可以使用message属性来只当错误消息。

因此,在SpringBoot校验实体类时,被约束的字段不能为null并且删除空格后的长度要大于零

除了 @NotBlank之外,Bean Validation 还提供了许多其他的约束。并且允许将多个校验规则应用到同一个字段上。更多的校验注解请参考Jakarta Bean Validation

4.实现一个REST控制器

下面时REST控制器的实现

@RestController
public class userController {

    @PostMapping("/users")
    ResponseEntity<String> addUser(@Valid @RequestBody UserEntity user) {
        return ResponseEntity.ok("User is valid");
    }

}

在Spring REST context中addUser()方法相当标准。

当然更重要的是@Valid注解的使用。

当 Spring Boot 发现一个用 @Valid 注解修饰的参数时,它会自动引导默认的 JSR 380 实现,即Hibernate Validator,并验证该参数。

当目标参数不能通过校验时,SpringBoot会抛出MethodArgumentNotValidException

5.@ExceptionHandler注解

@ExceptionHandler允许我们使用一个方法处理指定类型的异常。

因此我们可以使用它来处理校验错误。

 @ResponseStatus(HttpStatus.BAD_REQUEST)
 @ExceptionHandler(MethodArgumentNotValidException.class)
 public Map<String, String> handleValidationExceptions(MethodArgumentNotValidException ex)
  {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        return errors;
   }

我们将MethodArgumentNotValidException异常指定为要处理的异常,因此,当指定的User实体没能通过校验时,Spring Boot会自动调用这个方法。

这个方法里,将每个字段的名字和不合法字段的错误消息提示放在一个Map集合里。接下来,它将 Map 作为 JSON 表示形式发送回客户端,以便进一步处理。

6.测试REST控制器

我们可以使用postman来测试

我们使用POST请求访问localhost:8080/users端口,并且使用合法的User对象时将返回字符串" User is valid"

同样的,我们POST请求访问相同端口,但是使用的是name和email是一个空串,将返回如下结果。

7.总结

在这篇文章中我们学习了在Spring Boot中执行基础的校验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值