自定义注解@Doublevalue
@Target({FIELD})
@Retention(RUNTIME)
@documented
@Constraint(validatedBy = {Doublevalidator.class}) // Doublevalidator具体实现校验方法
public @interface Doublevalue {
String message() default "";
double max();
double min();
// 不加以下两个参数会报错
Class>[] groups() default { };
Class extends Payload>[] payload() default { };
}
实现类代码
public class Doublevalidator implements ConstraintValidator {
private double max = 1;
private double min = 1;
private String message;
@Override
public void initialize(Doublevalue constraintAnnotation) {
max = constraintAnnotation.max();
min = constraintAnnotation.min();
message = constraintAnnotation.message();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
if (value instanceof Double) {
Double v = (Double) value; // double类型作比较只能使用double的包装类
if (v.compareTo(min) >= 0 && v.compareTo(max) <= 0) {
return v.compareTo(min) >= 0 && v.compareTo(max) <= 0; // 判断数值是否在指定区间
}
}
return false;
}
}
具体实体类上使用
public class MapVo {
@NotNull(message = "经度值不能为空")
@Doublevalue(max = 180.0, min = -180.0, message = "经度值范围: -180° ~ 180°")
private Double wgLng;
@NotNull(message = "纬度值不能为空")
@Doublevalue(max = 90, min = -90, message = "纬度值范围: -90°~90°")
private Double wgLat;
@NotEmpty(message = "方法名不能为空")
private String convert;
}
接口上使用@Valid
@PostMapping("/mpConvert")
public Result convert(@Valid MapVo mapVo) {
System.out.println(mapVo);
}