自定义参数校验
前提条件:需要javax.validation
包
以下是实现对controller的参数实体加@DictValidation
后完成校验此字典值是否合法
1.自定义注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Constraint(validatedBy = {DictValidateHandler.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
public @interface DictValidation {
String belongModule() default "";
String value() default "";
boolean required() default true;
String message() default "请检查业务数据字典是否正确配置";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2.实现ConstraintValidator
接口
import com.kailinjt.projectmanagement.admin.api.annotation.DictValidation;
import com.kailinjt.projectmanagement.admin.api.service.DictService;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Resource;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* @author hym
* @description
* @date 2024/7/10
*/
public class DictValidateHandler implements ConstraintValidator<DictValidation, Integer> {
private String belongModule;
private String value;
private boolean required;
@Resource
private DictService dictService;
@Override
public void initialize(DictValidation constraintAnnotation) {
this.belongModule = constraintAnnotation.belongModule();
this.value = constraintAnnotation.value();
this.required = constraintAnnotation.required();
}
@Override
public boolean isValid(Integer code, ConstraintValidatorContext context) {
if (required){
if (code != null && StringUtils.isNotBlank(this.value)) {
String resValue = dictService.getDictValue(code, this.belongModule);
return value.equals(resValue);
}
}else {
if (code != null) {
String resValue = dictService.getDictValue(code, this.belongModule);
return StringUtils.isNotBlank(resValue);
}
}
return true;
}
}
3.使用
import com.kailinjt.projectmanagement.admin.api.annotation.DictValidation;
import com.kailinjt.projectmanagement.common.data.param.PageBaseParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("xxx")
public class xxxxParam extends PageBaseParam {
@NotNull(message = "资金类型不能为空")
@DictValidation(belongModule = "fundType",value = "证照费")
@ApiModelProperty("资金类型")
private Integer fundType;
}
@PostMapping("/xxx")
public Result<xxxDto> pagePayRecodeDataPenetration(@Validated @RequestBody xxxxParam param) {
return Result.success();
}