springboot @valid Constraint自定义注解

一、自定义annotation

pom.xml

<!--        <dependency> --> 
<!--            <groupId>javax.validation</groupId> -->
<!--            <artifactId>validation-api</artifactId> -->
            <!--            <version>1.1.0.Final</version>-->
            <!--            <scope>provided</scope>-->
<!--        </dependency> -->

        <!-- 一定要加载这个,不能@Valid无效 -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

annotation

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = SelfConstraintValidator.class)
public @interface SelfConstraint {

    String message() default "参数不对";  //必要

    long min() default 1L;
    long max() default 1L;

    Class<?>[] groups() default {};  //必要
    Class<? extends Payload>[] payload() default {}; //必要
}

validator

public class ValueInValidator implements ConstraintValidator<ValueIn, Object>{

    @Override
    public void initialize(ValueIn constraintAnnotation) {
        required = constraintAnnotation.required();
        if (constraintAnnotation.value().isEmpty()) {
            String[] arr  =  constraintAnnotation.value().split(",");
            for (String a:arr) {
                allowValues.add(a);
            }
        } else {
            allowValues = Collections.emptyList();
        }
    }


    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        return false;
    }

    private List<String> allowValues;

    private boolean required;

}

二、使用annotation


import lombok.Data;
import org.example.validation.annotation.SelfConstraint;
import org.example.validation.annotation.ValueIn;

@Data
public class FruitVo {

    @ValueIn(value = "apple,orange",message = "值不在范围内容")
    public String fruitName;

    @SelfConstraint(min = 1,max = 20,message = "xxxAAAxxx")
    public Long weight;

}

import org.example.vo.FruitVo;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;


@RestController
@RequestMapping(value = "/index", produces = {"application/json;charset=utf-8"})
public class IndexController {


    @RequestMapping("/index")
    public String index() {
        return "/index/index";
    }

    @PostMapping("/fruit")
    public String fruit(@Valid @RequestBody FruitVo f) {
        return f.fruitName + ": " + f.getWeight();
    }
}

三、验证

http://localhost:8003/index/index
application/json

{
  "fruitName":"aaa",
  "weight": 30
}

posted @   amu2018  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示