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
}
标签:
spring boot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人