首页 >> 中医推拿

自定义validation注解:补救动态多字段联动校验问题

发布时间:2025年08月14日 12:20

orrect() { OrderModelA model = new OrderModelA(); model.setOrderId(1); model.setOrderName("批次旧名"); List goodsList = new ArrayList(); goodsList.add("goods1"); goodsList.add("goods2"); goodsList.add("goods3"); model.setGoodsList(goodsList); model.setAmount(new BigDecimal("10")); bizValidateService.bizMethodA(model, "param"); } @Test public void testBizValidateA_error() { OrderModelA model = new OrderModelA(); model.setOrderId(0); model.setOrderName("批次旧名"); List goodsList = new ArrayList(); goodsList.add("goods1"); goodsList.add("goods2"); goodsList.add("goods3"); model.setGoodsList(goodsList); model.setAmount(new BigDecimal("10")); bizValidateService.bizMethodA(model, "param"); }}

2.5 报错信息javax.validation.ConstraintViolationException: bizMethodA.model.orderId: 批次序号不能等同等同1 at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:117) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) at com.java.front.validation.BizValidateServiceImpl$$EnhancerBySpringCGLIB$$42c25c43.bizMethodA() at com.java.front.TestAuthApplication.testBizValidateA_error(TestAuthApplication.java:62)3 复杂应用领域

现在我们举例一种场景批次新增了type1、type2两个字符串,这两个字符串影响对于orderId个数区域假定,并不一定orderId区域假定不必是静态的,而是受其它字符串影响。

针对这种上述情况第一步我们可以构造type1、type2、orderId组合成字符串,第二步示例数据包容器将组合成字符串拆开顺利进行业务区域数据包。

3.1 度量梗概import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.validation.Constraint;import javax.validation.Payload;@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })@Constraint(validatedBy = TypeAndOrderIdValidator.class)public @interface TypeAndOrderIdValid { String message() default "不充分利用业务区域条件"; Class[] groups() default {}; Classextends Payload>[] payload() default {};}3.2 度量数据包容器import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import com.java.front.validation.model.OrderModelB;public class TypeAndOrderIdValidator implements ConstraintValidatorString> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { String[] array = value.split(OrderModelB.JOINT); int type1 = Integer.parseInt(array[0]); int type2 = Integer.parseInt(array[1]); int orderId = Integer.parseInt(array[2]); if (type1 == 1 && type2 == 2) { return orderId> 20; } return true; }}3.3 度量模型import java.math.BigDecimal;import java.util.List;import javax.validation.constraints.DecimalMin;import javax.validation.constraints.Max;import javax.validation.constraints.Min;import javax.validation.constraints.NotBlank;import javax.validation.constraints.Size;import com.alibaba.fastjson.annotation.JSONField;import com.java.front.server.validation.extend.TypeAndOrderIdValid;import lombok.Data;@Datapublic class OrderModelB { public static final String JOINT = "_"; @Min(value = 1, message = "批次序号不能等同等同1") @Max(value = 100, message = "批次序号不能之比等同100") private Integer orderId; @NotBlank(message = "批次旧名不能为空") private String orderName; @Size(min = 1, max = 10) private List goodsList; @DecimalMin(value = "1", message = "批次利息不能等同等同1") private BigDecimal amount; private int type1; private int type2; @JSONField(serialize = false) private String typeAndOrderIdComposite; @TypeAndOrderIdValid public String getTypeAndOrderIdComposite() { return getType1() + JOINT + getType2() + JOINT + getOrderId(); }}3.4 度量适配容器import javax.validation.Valid;import javax.validation.constraints.NotNull;import org.springframework.validation.annotation.Validated;import com.java.front.validation.model.OrderModelB;@Validatedpublic interface BizValidateService { void bizMethodB(@Valid OrderModelB model, @NotNull String param);}3.5 适配容器构建import javax.validation.Valid;import javax.validation.constraints.NotNull;import org.springframework.stereotype.Component;import com.alibaba.fastjson.JSON;import com.java.front.server.validation.model.OrderModelB;@Componentpublic class BizValidateServiceImpl implements BizValidateService { @Override public void bizMethodB(@Valid OrderModelB model, @NotNull String param) { System.out.println("execute bizB model=" + JSON.toJSONString(model) + ",param=" + param); }}3.6 简而言之@RunWith(SpringRunner.class)@SpringBootTestpublic class TestAuthApplication { @Autowired private BizValidateService bizValidateService; @Test public void testBizValidateB_correct() { OrderModelB model = new OrderModelB(); model.setOrderId(30); model.setOrderName("批次旧名"); List goodsList = new ArrayList(); goodsList.add("goods1"); goodsList.add("goods2"); goodsList.add("goods3"); model.setGoodsList(goodsList); model.setAmount(new BigDecimal("10")); model.setType1(1); model.setType2(2); bizValidateService.bizMethodB(model, "param"); } @Test public void testBizValidateB_error() { OrderModelB model = new OrderModelB(); model.setOrderId(1); model.setOrderName("批次旧名"); List goodsList = new ArrayList(); goodsList.add("goods1"); goodsList.add("goods2"); goodsList.add("goods3"); model.setGoodsList(goodsList); model.setAmount(new BigDecimal("10")); model.setType1(1); model.setType2(2); bizValidateService.bizMethodB(model, "param"); }}3.7 错误信息javax.validation.ConstraintViolationException: bizMethodB.model.typeAndOrderIdComposite: 不充分利用业务区域条件 at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:117) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) at com.java.front.validation.BizValidateServiceImpl$$EnhancerBySpringCGLIB$$7c26a7cb.bizMethodB() at com.java.front.server.TestAuthApplication.testBizValidateB_error(TestAuthApplication.java:94)4 短文总结

本文第一篇章讲解了validation也就是说概念,第二篇章讲解了validation也就是说应用领域,第三篇章讲解了通过示例梗概动态数据包字符串,希望本文对大家有所帮助。

赞赏大家关注时至今日头条号「JAVA机动部队」查询不够多精彩互动短文,主要包括源码分析、理论上应用领域、架构思维、人际关系互动、产品反思

昆明甲状腺医院哪家更好
潍坊精神病治疗费用
重庆皮肤病医院地址

上一篇: 2022年新生儿取名离骚诗经

下一篇: 2.1 eTS物种起源地

友情链接