返回

揭秘"spring boot @Validated注解失效"之谜:轻松搞定表单验证

前端

告别 @Validated 注解失效,制霸表单验证

在 Java 开发领域,Spring Boot 框架以其便捷高效的特性备受青睐。但当你使用 @Validated 注解进行表单验证时,却可能遇到失效的情况,导致难以发现的错误。本文将带你踏上解决 Spring Boot 中 @Validated 注解失效的奇妙之旅,让你轻松搞定表单验证。

Spring Boot 2.3.0:新版本,新挑战

在 Spring Boot 2.3.0 之前,spring-boot-starter-web 依赖中集成了表单验证功能。但从 2.3.0 版本开始,该依赖被移除,意味着我们需要自己添加依赖。

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>

集合对象:别忘了 @Valid 注解

如果你使用的是集合对象,如 List,请务必在集合对象前面加上 @Valid 注解。否则,@Validated 注解将对集合中的元素无效。

@PostMapping("/save-users")
public void saveUsers(@RequestBody @Valid List<User> users) {
    // ...
}

非对象参数:在 Controller 类上使用 @Validated 注解

如果你的参数不是对象,如 String 或 int,则需要在 Controller 类上使用 @Validated 注解。

@RestController
@Validated
public class UserController {

    @PostMapping("/save-user")
    public void saveUser(@RequestBody User user) {
        // ...
    }
}

对象属性:属性前加上 @Valid 注解

对于对象属性,需要在属性前面加上 @Valid 注解。

public class User {

    @NotNull
    private String name;

    @Valid
    private Address address;

    // ...
}

错误提示:当 @Validated 注解失效时,Spring Boot 会返回什么?

当 @Validated 注解失效时,Spring Boot 会返回 400 Bad Request 错误。错误信息通常为:"Validation failed for argument at index X in method Y of controller Z; nested exception is xxx”。

常见问题解答:解决 @Validated 注解失效的常见问题

  • Q:为什么在 Controller 类上使用 @Validated 注解后,仍然无效?
    A:请确保你已经导入了 javax.validation.Valid 注解。

  • Q:为什么在对象属性前使用 @Valid 注解后,仍然无效?
    A:请确保你已经导入了 javax.validation.Valid 注解。

  • Q:为什么在集合对象前使用 @Valid 注解后,仍然无效?
    A:请确保你已经导入了 javax.validation.Valid 注解。

  • Q:为什么我得到了"Validation failed for argument at index X in method Y of controller Z; nested exception is xxx"错误?
    A:这是 Spring Boot 返回的错误信息,表示验证失败。xxx 是导致验证失败的具体原因。

  • Q:如何解决"Validation failed for argument at index X in method Y of controller Z; nested exception is xxx"错误?
    A:请根据 xxx 错误信息,检查你的代码,并修复验证错误。

总结:告别 @Validated 注解失效,轻松搞定表单验证

通过本文的深入解析,你已经掌握了解决 Spring Boot 中 @Validated 注解失效的诀窍。从添加依赖、使用 @Valid 注解,到解决常见问题,你已经成为表单验证的专家。下次遇到 @Validated 注解失效时,你将能够轻松搞定,让你的代码更加健壮可靠。