diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/ValidationGroups.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/ValidationGroups.java deleted file mode 100644 index bb05fc6..0000000 --- a/mall-common/src/main/java/com/mall/common/domain/dto/valid/ValidationGroups.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mall.common.domain.dto.valid; - -public interface ValidationGroups { - interface QUERY { - } - - interface Add { - } - - interface Update { - } - - interface DELETE { - } -} \ No newline at end of file diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValue.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValue.java new file mode 100644 index 0000000..d4dc693 --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValue.java @@ -0,0 +1,27 @@ +package com.mall.common.domain.dto.valid.custom; + +import jakarta.validation.Constraint; +import jakarta.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 = {ListValueConstraintValidator.class}) +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +public @interface ListValue { + + String message() default "{com.mall.common.domain.dto.valid.custom.ListValue.message}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + int[] vals() default {}; + +} diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValueConstraintValidator.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValueConstraintValidator.java new file mode 100644 index 0000000..320f15e --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/custom/ListValueConstraintValidator.java @@ -0,0 +1,48 @@ +package com.mall.common.domain.dto.valid.custom; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.util.HashSet; +import java.util.Set; + +public class ListValueConstraintValidator implements ConstraintValidator { + private final Set set = new HashSet<>(); + + /** + * Initializes the validator in preparation for + * calls. + * The constraint annotation for a given constraint declaration + * is passed. + *

+ * This method is guaranteed to be called before any use of this instance for + * validation. + *

+ * The default implementation is a no-op. + * + * @param constraintAnnotation annotation instance for a given constraint declaration + */ + @Override + public void initialize(ListValue constraintAnnotation) { + int[] vals = constraintAnnotation.vals(); + for (int val : vals) { + set.add(val); + } + } + + /** + * Implements the validation logic. + * The state of {@code value} must not be altered. + *

+ * This method can be accessed concurrently, thread-safety must be ensured + * by the implementation. + * + * @param value object to validate + * @param context context in which the constraint is evaluated + * @return {@code false} if {@code value} does not pass the constraint + */ + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + return set.contains(value); + } +} diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/AddGroup.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/AddGroup.java new file mode 100644 index 0000000..c672874 --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/AddGroup.java @@ -0,0 +1,4 @@ +package com.mall.common.domain.dto.valid.group; + +public interface AddGroup { +} diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/DeletedGroup.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/DeletedGroup.java new file mode 100644 index 0000000..8d47175 --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/DeletedGroup.java @@ -0,0 +1,4 @@ +package com.mall.common.domain.dto.valid.group; + +public interface DeletedGroup { +} diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/QueryGroup.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/QueryGroup.java new file mode 100644 index 0000000..6154478 --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/QueryGroup.java @@ -0,0 +1,4 @@ +package com.mall.common.domain.dto.valid.group; + +public interface QueryGroup { +} diff --git a/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/UpdateGroup.java b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/UpdateGroup.java new file mode 100644 index 0000000..aff23d4 --- /dev/null +++ b/mall-common/src/main/java/com/mall/common/domain/dto/valid/group/UpdateGroup.java @@ -0,0 +1,4 @@ +package com.mall.common.domain.dto.valid.group; + +public interface UpdateGroup { +} diff --git a/mall-common/src/main/resources/ValidationMessages.properties b/mall-common/src/main/resources/ValidationMessages.properties new file mode 100644 index 0000000..33241d5 --- /dev/null +++ b/mall-common/src/main/resources/ValidationMessages.properties @@ -0,0 +1 @@ +com.mall.common.domain.dto.valid.custom.ListValue.message=\u503C\u4E0D\u5728\u6307\u5B9A\u8303\u56F4\u4E2D \ No newline at end of file diff --git a/mall-services/mall-product/src/main/java/com/mall/product/controller/BrandController.java b/mall-services/mall-product/src/main/java/com/mall/product/controller/BrandController.java index 1f44ccf..979f67b 100644 --- a/mall-services/mall-product/src/main/java/com/mall/product/controller/BrandController.java +++ b/mall-services/mall-product/src/main/java/com/mall/product/controller/BrandController.java @@ -1,7 +1,8 @@ package com.mall.product.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.mall.common.domain.dto.valid.ValidationGroups; +import com.mall.common.domain.dto.valid.group.AddGroup; +import com.mall.common.domain.dto.valid.group.UpdateGroup; import com.mall.common.domain.vo.result.PageResult; import com.mall.common.domain.vo.result.Result; import com.mall.common.domain.vo.result.ResultCodeEnum; @@ -12,7 +13,6 @@ import com.mall.product.service.BrandService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -50,14 +50,14 @@ public class BrandController { @Operation(summary = "添加品牌", description = "添加品牌") @PostMapping() - public Result addBrand(@Valid @RequestBody BrandDto dto) { + public Result addBrand(@Validated(AddGroup.class) @RequestBody BrandDto dto) { brandService.addBrand(dto); return Result.success(ResultCodeEnum.ADD_SUCCESS); } @Operation(summary = "更新品牌", description = "更新品牌") @PutMapping() - public Result updateBrand(@Validated(ValidationGroups.Update.class) @RequestBody BrandDto dto) { + public Result updateBrand(@Validated(UpdateGroup.class) @RequestBody BrandDto dto) { brandService.updateBrand(dto); return Result.success(ResultCodeEnum.UPDATE_SUCCESS); } diff --git a/mall-services/mall-product/src/main/java/com/mall/product/domain/dto/BrandDto.java b/mall-services/mall-product/src/main/java/com/mall/product/domain/dto/BrandDto.java index bd5e707..2677bd6 100644 --- a/mall-services/mall-product/src/main/java/com/mall/product/domain/dto/BrandDto.java +++ b/mall-services/mall-product/src/main/java/com/mall/product/domain/dto/BrandDto.java @@ -1,6 +1,9 @@ package com.mall.product.domain.dto; -import com.mall.common.domain.dto.valid.ValidationGroups; +import com.mall.common.domain.dto.valid.custom.ListValue; +import com.mall.common.domain.dto.valid.group.AddGroup; +import com.mall.common.domain.dto.valid.group.DeletedGroup; +import com.mall.common.domain.dto.valid.group.UpdateGroup; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -18,21 +21,22 @@ import org.hibernate.validator.constraints.URL; public class BrandDto { @Schema(name = "brandId", title = "品牌id") - @NotNull(message = "品牌id未传", groups = {ValidationGroups.Update.class, ValidationGroups.DELETE.class}) + @NotNull(message = "品牌id未传", groups = {UpdateGroup.class, DeletedGroup.class}) private Long brandId; @Schema(name = "name", title = "品牌名") - @NotBlank(message = "品牌名不能为空", groups = ValidationGroups.Update.class) + @NotBlank(message = "品牌名不能为空", groups = {AddGroup.class, UpdateGroup.class}) private String name; @Schema(name = "logo", title = "品牌logo地址") - @URL(message = "logo地址不合法") + @URL(message = "logo地址不合法", groups = {AddGroup.class, UpdateGroup.class}) private String logo; @Schema(name = "descript", title = "介绍") private String descript; @Schema(name = "showStatus", title = "显示状态[0-不显示;1-显示]") + @ListValue(vals = {0, 1}, groups = {AddGroup.class, UpdateGroup.class}) private Integer showStatus; @Schema(name = "firstLetter", title = "检索首字母")