2在线做网站,在线生成个人网站免费观看,学校网站模板免费,大连网站建设背景
入参校验一般是在控制层通过javax.validation.constraints包下的规则注解如NotNull结合Valid与Validated实现#xff0c;但是有时候我们的方法不提供给controller调用#xff0c;这时候就无法触发自动参数校验#xff0c;为此我们可以在不更改校验代码的前提下手动触发…背景
入参校验一般是在控制层通过javax.validation.constraints包下的规则注解如NotNull结合Valid与Validated实现但是有时候我们的方法不提供给controller调用这时候就无法触发自动参数校验为此我们可以在不更改校验代码的前提下手动触发spring的参数校验。
代码实现
触发工具类
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import java.util.List;
import java.util.Set;/*** description validator参数校验类*/
public class ValidateUtil {private static final Validator VALIDATOR Validation.buildDefaultValidatorFactory().getValidator();/*** 校验实体类* param t 参数* param notNull t是否可以为空*/public static T void validate(T t, boolean notNull) {if (t null) {if (notNull) {throw new ValidationException(参数不能为空);}return;}SetConstraintViolationT constraintViolations VALIDATOR.validate(t);if (constraintViolations.size() 1) {return;}for (ConstraintViolationT constraintViolation : constraintViolations) {throw new ValidationException(constraintViolation.getMessage());}}public static T void validate(T t) {validate(t, false);}public static T void validate(ListT list) {validate(list, false);}/*** description: 参数校验* date 11:59 2024/6/7* param list* param notNull list是否可以为空**/public static T void validate(ListT list, boolean notNull) {if (list null || list.isEmpty()) {if (notNull) {throw new ValidationException(参数不能为空);}return;}list.forEach(item - {SetConstraintViolationT constraintViolations VALIDATOR.validate(item);if (constraintViolations.size() 1) {return;}for (ConstraintViolationT constraintViolation : constraintViolations) {throw new ValidationException(constraintViolation.getMessage());}});}/*** 通过组来校验实体类* param t 参数* param notNull t是否可以为空* param groups 校验组*/public static T void validate(T t, boolean notNull, Class?... groups) {if (t null) {if (notNull) {throw new ValidationException(参数不能为空);}return;}SetConstraintViolationT constraintViolations VALIDATOR.validate(t, groups);if (constraintViolations.size() 1) {return;}for (ConstraintViolationT constraintViolation : constraintViolations) {throw new ValidationException(constraintViolation.getMessage());}}public static T void validate(T t, Class?... groups) {validate(t, false, groups);}
}使用
// 方法入参
public class RefundOrderParam {ApiModelProperty(value 总退款金额, required true)NotNull(message 总退款金额不能为空, groups {InsertGroup.class, UpdateGroup.class})private BigDecimal totalRefundMoney;ApiModelProperty(value 是否原路退, required true)NotNull(message 是否原路退不能为空, groups {InsertGroup.class, UpdateGroup.class})private Boolean originalRefund;
}
//触发校验
ValidateUtil.validate(request, UpdateGroup.class);