Spring Boot中的@Validated和@Valid

前言

在开发Web应用程序时,输入数据的验证是一个重要的问题。Spring Boot提供了两种方式来验证输入数据:@Validated@Valid。这两种方式都可以用于验证请求参数和请求体中的数据。本文将详细介绍这两种验证方式的使用方法和区别。

什么是@Validated和@Valid

@Validated

@Validated是Spring框架中的一个注解,它是JSR-303规范的扩展,可以用于在方法级别上校验方法参数。它可以用于验证请求参数和请求体中的数据。@Validated注解可以用于方法级别和类级别上,用于验证方法参数和类属性。

@Valid

@Valid是JSR-303规范中定义的一个注解,它可以用于验证Java Bean中的属性。在Spring Boot中,@Valid注解可以用于验证请求体中的数据。如果请求体中的数据是一个Java Bean对象,那么可以使用@Valid注解来验证该对象的属性值是否符合要求。

@Validated和@Valid的区别

@Validated@Valid都可以用于验证输入数据,但是它们的使用场景不同。@Validated注解主要用于验证方法参数,而@Valid注解主要用于验证Java Bean对象的属性。

另外,@Validated注解支持分组校验,可以根据不同的场景对同一个对象进行不同的校验。而@Valid注解不支持分组校验,只能对整个Java Bean对象进行校验。

@Validated的使用方法

在方法级别上使用@Validated

在方法级别上使用@Validated注解,需要在方法参数上添加该注解。下面是一个简单的示例,演示了如何在方法级别上使用@Validated注解。

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public User createUser(@RequestBody @Validated User user) {
        // 处理用户创建逻辑
    }

}

在上面的示例代码中,@Validated注解被应用在User对象上,用于验证请求体中的数据是否符合要求。

在类级别上使用@Validated

在类级别上使用@Validated注解,需要在类上添加该注解。下面是一个简单的示例,演示了如何在类级别上使用@Validated注解。

@RestController
@RequestMapping("/users")
@Validated
public class UserController {

    @PostMapping
    public User createUser(@RequestBody User user) {
        // 处理用户创建逻辑
    }

}

在上面的示例代码中,@Validated注解被应用在UserController类上,用于验证该类中所有方法的参数是否符合要求。

使用分组校验

@Validated注解支持分组校验,可以根据不同的场景对同一个对象进行不同的校验。下面是一个简单的示例,演示了如何使用分组校验。

public interface UpdateGroup {}

public interface CreateGroup {}

public class User {

    @NotNull(groups = {UpdateGroup.class})
    private Long id;

    @NotBlank(groups = {CreateGroup.class})
    private String name;

    @NotBlank(groups = {CreateGroup.class})
    private String password;

    // 省略其他属性和方法
}

在上面的示例代码中,定义了两个分组:CreateGroupUpdateGroupUser对象中的id属性只在UpdateGroup分组中进行校验,而namepassword属性只在CreateGroup分组中进行校验。

在使用@Validated注解时,可以通过groups属性指定要使用的分组。下面是一个示例代码,演示了如何使用分组校验。

@RestController
@RequestMapping("/users")
@Validated
public class UserController {

    @PostMapping
    public User createUser(@RequestBody @Validated(CreateGroup.class) User user) {
        // 处理用户创建逻辑
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody @Validated(UpdateGroup.class) User user) {
        // 处理用户更新逻辑
    }

}

在上面的示例代码中,createUser方法中的User对象只进行CreateGroup分组的校验,而updateUser方法中的User对象只进行UpdateGroup分组的校验。

@Valid的使用方法

在方法参数上使用@Valid

在方法参数上使用@Valid注解,需要在方法参数上添加该注解。下面是一个简单的示例,演示了如何在方法参数上使用@Valid注解。

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public User createUser(@RequestBody @Valid User user) {
        // 处理用户创建逻辑
    }

}

在上面的示例代码中,@Valid注解被应用在User对象上,用于验证请求体中的数据是否符合要求。

在Java Bean中使用@Valid

在Java Bean中使用@Valid注解,需要在Java Bean的属性上添加该注解。下面是一个简单的示例,演示了如何在Java Bean中使用@Valid注解。

public class User {

    @NotBlank
    private String name;

    @NotBlank
    private String password;

    // 省略其他属性和方法
}

在上面的示例代码中,@Valid注解被应用在namepassword属性上,用于验证这两个属性的值是否符合要求。

总结

本文介绍了Spring Boot中的两种输入数据验证方式:@Validated@Valid@Validated注解主要用于验证方法参数,支持分组校验;@Valid注解主要用于验证Java Bean对象的属性。使用这两种注解可以有效地保证输入数据的合法性,提高应用程序的健壮性和可靠性。

公众号请关注"果酱桑", 一起学习,一起进步!

你可能感兴趣的:(Springboot,spring,boot,java,spring)