diff --git a/book-product/src/main/java/com/bookstore/bookmall/product/controller/BrandController.java b/book-product/src/main/java/com/bookstore/bookmall/product/controller/BrandController.java index ff2e3ae..9d86ed9 100644 --- a/book-product/src/main/java/com/bookstore/bookmall/product/controller/BrandController.java +++ b/book-product/src/main/java/com/bookstore/bookmall/product/controller/BrandController.java @@ -5,8 +5,11 @@ import java.util.HashMap; import java.util.Map; +import com.bookstore.common.valid.AddGroup; +import com.bookstore.common.valid.AddShowStatusGroup; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -62,7 +65,7 @@ public class BrandController { */ @RequestMapping("/save") //@RequiresPermissions("product:brand:save") - public R save(@Valid @RequestBody BrandEntity brand /* ,BindingResult result*/){ // @Valid开启校验功能 + public R save(@Validated(AddGroup.class) @RequestBody BrandEntity brand /* ,BindingResult result*/){ // @Valid开启校验功能 // if (result.hasErrors()) { // //获取校验结果,foreach遍历全部错误数据 // Map map = new HashMap<>(); @@ -92,6 +95,13 @@ public class BrandController { return R.ok(); } + @RequestMapping("/update/status") + //@RequiresPermissions("product:brand:update") + public R updateStatus(@Validated(AddShowStatusGroup.class) @RequestBody BrandEntity brand){ + brandService.updateById(brand); + return R.ok(); + } + /** * 删除 */ diff --git a/book-product/src/main/java/com/bookstore/bookmall/product/entity/BrandEntity.java b/book-product/src/main/java/com/bookstore/bookmall/product/entity/BrandEntity.java index 34cad0d..c8d0267 100644 --- a/book-product/src/main/java/com/bookstore/bookmall/product/entity/BrandEntity.java +++ b/book-product/src/main/java/com/bookstore/bookmall/product/entity/BrandEntity.java @@ -3,10 +3,13 @@ package com.bookstore.bookmall.product.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import java.awt.*; import java.io.Serializable; import java.util.Date; import com.bookstore.common.valid.AddGroup; +import com.bookstore.common.valid.AddShowStatusGroup; +import com.bookstore.common.valid.ListValue; import com.bookstore.common.valid.UpdataGroup; import lombok.Data; import org.hibernate.validator.constraints.URL; @@ -35,13 +38,13 @@ public class BrandEntity implements Serializable { /** * 品牌名 */ - @NotBlank(message = "品牌不能为空", groups = {UpdataGroup.class}) + @NotBlank(message = "品牌不能为空", groups = {UpdataGroup.class, AddGroup.class}) private String name; /** * 品牌logo地址 */ @NotNull - @URL(message = "logo必须是一个合法的url地址") + @URL(message = "logo必须是一个合法的url地址", groups = {AddGroup.class, UpdataGroup.class}) private String logo; /** * 介绍 @@ -50,16 +53,18 @@ public class BrandEntity implements Serializable { /** * 显示状态[0-不显示;1-显示] */ + + @ListValue(vals={0, 1},groups = {AddShowStatusGroup.class, AddGroup.class}) //自己编写的校验注解 private Integer showStatus; /** * 检索首字母 */ - @Pattern(regexp = "/^[a-zA-Z]$/", message = "检索首字母必须是一个首字母") + @Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个首字母", groups = {AddGroup.class, UpdataGroup.class}) private String firstLetter; /** * 排序 */ - @Min(value = 0, message="排序必须大于等于0") + @Min(value = 0, message="排序必须大于等于0", groups = {AddGroup.class, UpdataGroup.class}) private Integer sort; } diff --git a/book-product/src/main/java/com/bookstore/bookmall/product/mallProductApplication.java b/book-product/src/main/java/com/bookstore/bookmall/product/mallProductApplication.java index 51c04c3..f0f55a6 100644 --- a/book-product/src/main/java/com/bookstore/bookmall/product/mallProductApplication.java +++ b/book-product/src/main/java/com/bookstore/bookmall/product/mallProductApplication.java @@ -28,10 +28,19 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; * 2、在controller中开启校验功能 * 3、给校验的bean后紧跟一个BindingResult.可以获取校验结果 * 4、分组校验 +* 1、@NotNull(message = "修改时必须指定品牌id", groups = {UpdataGroup.class}), 为字段添加校验标签, +* 给校验标注什么情况需要校验 +* 2在controller中使用Validated中开启校验注解 +* 注意,若使用Validated,未指定分组的字段默认不生效 *统一的异常处理 * @controllerAdvice * 1、当数据校验发生异常时,抛出到controllerAdvice集中处理 * +* 自定以校验注解 +* 1、编写一个自定义的校验注解 +* 2、编写一个自定义的校验器 +* 3、关联自定义的校验器和检验注解 +* * * */ diff --git a/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java b/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java new file mode 100644 index 0000000..610d635 --- /dev/null +++ b/mall-common/src/main/java/com/bookstore/common/valid/AddShowStatusGroup.java @@ -0,0 +1,4 @@ +package com.bookstore.common.valid; + +public interface AddShowStatusGroup { +} diff --git a/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java b/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java new file mode 100644 index 0000000..cb26c34 --- /dev/null +++ b/mall-common/src/main/java/com/bookstore/common/valid/ListValue.java @@ -0,0 +1,21 @@ +package com.bookstore.common.valid; + +import javax.validation.Constraint; +import javax.validation.Payload; +import javax.validation.constraints.NotNull; +import java.lang.annotation.*; + +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = {ListValueConstraintValidator.class}) //这里填的是校验器,可以自己编写一个 +@Documented + +public @interface ListValue { + String message() default "{com.bookstore.common.valid.ListValue.message}"; //会在一个配置文件中取得错误消息,我们用自己的,所以添加一个ValidationMessages.properties + + Class[] groups() default {}; + + Class[] payload() default {}; + + int[] vals() default {}; +} diff --git a/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java b/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java new file mode 100644 index 0000000..ae26a23 --- /dev/null +++ b/mall-common/src/main/java/com/bookstore/common/valid/ListValueConstraintValidator.java @@ -0,0 +1,38 @@ +package com.bookstore.common.valid; + +import org.hibernate.validator.internal.util.annotation.ConstraintAnnotationDescriptor; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.HashSet; +import java.util.Set; + +public class ListValueConstraintValidator implements ConstraintValidator/*第一个泛型是校验注解,第二个泛型是校验类型*/ { + + private Set set = new HashSet<>(); + + //初始化方法,会将详细信息给我门 + @Override + public void initialize(ListValue constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + + int[] vals = constraintAnnotation.vals(); //获取数据 + for (int i =0; i < vals.length; i++) { + set.add(vals[i]); + } + } + + @Override + + + /* + @param value 第一个value是用户提交用于校验的数据 + @param context + @return + * */ + public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) { + + return value == null || set.contains(value); + } + +} diff --git a/mall-common/src/main/resources/ValidationMessages.properties b/mall-common/src/main/resources/ValidationMessages.properties new file mode 100644 index 0000000..4402c68 --- /dev/null +++ b/mall-common/src/main/resources/ValidationMessages.properties @@ -0,0 +1 @@ + com.bookstore.common.valid.ListValue.message=必须提交的值 \ No newline at end of file diff --git a/renren-fast-vue/src/views/modules/common/category.vue b/renren-fast-vue/src/views/modules/common/category.vue new file mode 100644 index 0000000..55da341 --- /dev/null +++ b/renren-fast-vue/src/views/modules/common/category.vue @@ -0,0 +1,68 @@ + + + + diff --git a/renren-fast-vue/src/views/modules/product/attrgroup-add-or-update.vue b/renren-fast-vue/src/views/modules/product/attrgroup-add-or-update.vue new file mode 100644 index 0000000..4b970ea --- /dev/null +++ b/renren-fast-vue/src/views/modules/product/attrgroup-add-or-update.vue @@ -0,0 +1,120 @@ + + + diff --git a/renren-fast-vue/src/views/modules/product/attrgroup.vue b/renren-fast-vue/src/views/modules/product/attrgroup.vue new file mode 100644 index 0000000..2da79ce --- /dev/null +++ b/renren-fast-vue/src/views/modules/product/attrgroup.vue @@ -0,0 +1,179 @@ + + + + +