diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/IntegerList.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IntegerList.java
new file mode 100644
index 0000000..8487906
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IntegerList.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.StringListValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Constraint(validatedBy = {StringListValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IntegerList {
+  String message() default "{validator.message.integerlist}";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+
+  String[] value();
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java
new file mode 100644
index 0000000..2c608df
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.StringListValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Constraint(validatedBy = {StringListValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface StringList {
+  String message() default "{validator.message.stringlist}";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+
+  String[] value();
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java
index ffbd2a6..4fc1ae1 100644
--- a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java
@@ -7,6 +7,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.Email;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
@@ -34,6 +35,7 @@
   @Sign
   private String mobile;
   @Sign
+  @Email(message = "Email 格式错误")
   private String email;
   @Sign
   private String address;
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/IntegerListValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/IntegerListValidator.java
new file mode 100644
index 0000000..aec2cee
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/IntegerListValidator.java
@@ -0,0 +1,27 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.IntegerList;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Arrays;
+
+public class IntegerListValidator implements ConstraintValidator<IntegerList, Integer> {
+
+  private Integer[] valueList;
+
+  @Override
+  public boolean isValid(Integer value, ConstraintValidatorContext context) {
+    if (Arrays.asList(valueList).contains(value))
+      return true;
+    return false;
+  }
+
+  @Override
+  public void initialize(IntegerList constraintAnnotation) {
+    valueList = new Integer[constraintAnnotation.value().length];
+    for (int i = 0; i < constraintAnnotation.value().length; i++) {
+      valueList[i] = Integer.parseInt(constraintAnnotation.value()[i]);
+    }
+  }
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java
new file mode 100644
index 0000000..63f6299
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.StringList;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Arrays;
+
+public class StringListValidator implements ConstraintValidator<StringList, String> {
+
+  private String[] valueList;
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    if (Arrays.asList(valueList).contains(value))
+      return true;
+    return false;
+  }
+
+  @Override
+  public void initialize(StringList constraintAnnotation) {
+    valueList = constraintAnnotation.value();
+  }
+}
