首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring boot自定义验证器注释不适用于参数

Spring Boot自定义验证器注解不适用于参数的原因是,Spring Boot默认使用的是Hibernate Validator作为验证器,而Hibernate Validator只支持对Bean对象进行验证,不支持对方法参数进行验证。

如果需要对方法参数进行验证,可以使用Spring框架提供的@Validated注解结合Hibernate Validator来实现。@Validated注解可以用于类或方法上,用于标记需要进行参数验证的类或方法。在方法参数上使用@Valid注解,可以触发参数验证。

以下是一个示例:

代码语言:txt
复制
@RestController
@Validated
public class UserController {

    @PostMapping("/users")
    public ResponseEntity createUser(@Valid @RequestBody User user) {
        // 处理创建用户的逻辑
        return ResponseEntity.ok("User created successfully");
    }
}

在上述示例中,@Validated注解标记了UserController类,表示该类需要进行参数验证。在createUser方法的参数上使用了@Valid注解,表示需要对该参数进行验证。

对于自定义的验证器,可以通过实现javax.validation.ConstraintValidator接口来创建。然后,在需要进行验证的字段上使用自定义的注解,并在注解中指定使用的验证器。

例如,我们创建一个自定义的手机号码验证器:

代码语言:txt
复制
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {

    String message() default "Invalid phone number";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
代码语言:txt
复制
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {

    @Override
    public void initialize(PhoneNumber constraintAnnotation) {
        // 初始化验证器
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 执行验证逻辑
        // 返回true表示验证通过,返回false表示验证失败
    }
}

然后,我们可以在需要验证手机号码的字段上使用@PhoneNumber注解:

代码语言:txt
复制
public class User {

    @PhoneNumber
    private String phoneNumber;

    // 其他字段和方法
}

以上就是使用Spring Boot自定义验证器注解的基本流程。对于更复杂的验证需求,可以参考Hibernate Validator的文档进行扩展。

推荐的腾讯云相关产品:腾讯云云服务器(ECS)、腾讯云数据库(TencentDB)、腾讯云对象存储(COS)等。具体产品介绍和链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

二胖写参数校验的坎坷之路

最近端午好久没有和二胖聚一聚了,于是约了二胖到人民广场去宰他一顿,正好最近他跳槽加薪了。 我:二胖听说你最近跳槽了,并且还是从传统软件公司跳到了互联网公司,工资是不是涨了一点啊,今天你请客哈。 二胖:别说了,工资是涨了点,但是性价比反而变低了,以前到点就下班,现在下班到家都快12点了。 我:新公司怎么样还适应吗?除了上班时间久点。 二胖:哎,这个还真稍微有点不适应,这不是刚进去没啥事,leader就给我安排了一个简单的用户保存功能,原来以前公司个把小时就做好了的功能,在这新公司硬是折腾了两三天,真是苦不堪言。我改了好几个版本最终leader才满意的点了点头。

02

参数校验这样写,就不会被辞退了。

最近端午好久没有和二胖聚一聚了,于是约了二胖到人民广场去宰他一顿,正好最近他跳槽加薪了。 我:二胖听说你最近跳槽了,并且还是从传统软件公司跳到了互联网公司,工资是不是涨了一点啊,今天你请客哈。 二胖:别说了,工资是涨了点,但是性价比反而变低了,以前到点就下班,现在下班到家都快12点了。 我:新公司怎么样还适应吗?除了上班时间久点。 二胖:哎,这个还真稍微有点不适应,这不是刚进去没啥事,leader就给我安排了一个简单的用户保存功能,原来以前公司个把小时就做好了的功能,在这新公司硬是折腾了两三天,真是苦不堪言。我改了好几个版本最终leader才满意的点了点头。

00
领券