소스 검색

完成参数校验工具类

tsurumure 8 달 전
부모
커밋
6f093776bd

+ 1 - 1
db/cms_article_category_i18n.sql

@@ -19,7 +19,7 @@ INSERT INTO cms_article_category_i18n (article_category_id, language, category_n
     (1, 'zh', '科技创新', '前沿科技与创新动态'),
     (1, 'en', 'Technological Innovation', 'Frontier Technology and Innovation Trends'),
     (2, 'zh', '健康生活', '为你解析情感与人际关系'),
-    (2, 'zh', 'Healthy life', 'For you to analyze emotions and relationships'),
+    (2, 'en', 'Healthy life', 'For you to analyze emotions and relationships'),
     (3, 'zh', '情感关系', '为你解析情感与人际关系'),
     (3, 'en', 'Emotional Relationships', 'Analyze Emotions and Interpersonal Relationships'),
     (4, 'zh', '旅行探索', '探索世界各地的旅行分享'),

+ 1 - 1
src/main/java/com/backendsys/entity/Cms/CmsArticleTranslationsDTO.java

@@ -14,7 +14,7 @@ public class CmsArticleTranslationsDTO {
     @NotNull(message="article_id 不能为空")
     private Long article_id;
 
-    @NotEmpty(message="language 不肥为空")
+    @NotEmpty(message="语言不能为空")
     private String language;
 
     @Size(max = 100, message = "资讯标题长度不超过 {max} 字符")

+ 1 - 1
src/main/java/com/backendsys/entity/Cms/CmsPageTranslationsDTO.java

@@ -14,7 +14,7 @@ public class CmsPageTranslationsDTO {
     @NotNull(message="page_id 不能为空")
     private Long page_id;
 
-    @NotEmpty(message="language 不肥为空")
+    @NotEmpty(message="语言不能为空")
     private String language;
 
     @Size(max = 100, message = "内容标题长度不超过 {max} 字符")

+ 4 - 6
src/main/java/com/backendsys/modules/cms/article/entity/ArticleCategoryI18n.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 
@@ -23,14 +22,13 @@ public class ArticleCategoryI18n {
     private Long id;
 
     @TableField("id")
-    @NotNull(message="(translations) article_category_id 不能为空", groups = { Detail.class, Update.class })
     private Long article_category_id;
-    @NotEmpty(message="(translations) language 不能为空")
+    @NotEmpty(message="语言不能为空", groups = { Create.class, Update.class })
     private String language;
 
-    @Size(max = 20, message = "资讯分类名称长度不超过 {max} 字符", groups = { Create.class, Update.class})
-    @NotBlank(message="(translations) 资讯分类名称不能为空", groups = { Create.class, Update.class, })
+    @Size(max = 20, message = "资讯分类名称长度不超过 {max} 字符", groups = { Create.class, Update.class })
+    @NotBlank(message="资讯分类名称不能为空", groups = { Create.class, Update.class })
     private String category_name;
-    @Size(max = 200, message = "(translations) 资讯分类描述长度不超过 {max} 字符", groups = { Create.class, Update.class})
+    @Size(max = 200, message = "资讯分类描述长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private String category_description;
 }

+ 13 - 8
src/main/java/com/backendsys/modules/cms/article/entity/ArticleI18n.java

@@ -11,24 +11,29 @@ import lombok.Data;
 @Data
 @TableName("cms_article_i18n")
 public class ArticleI18n {
+
+    public static interface Detail{}
+    public static interface Create{}
+    public static interface Update{}
+    public static interface Delete{}
+
     @TableId(type = IdType.AUTO)
     private Long id;
 
-    @NotNull(message="article_id 不能为空")
     private Long article_id;
-    @NotEmpty(message="language 不肥为空")
+    @NotEmpty(message="语言不能为空", groups = { Create.class, Update.class })
     private String language;
 
-    @Size(max = 100, message = "资讯标题长度不超过 {max} 字符")
-    @NotEmpty(message="资讯标题不能为空")
+    @Size(max = 100, message = "资讯标题长度不超过 {max} 字符", groups = { Create.class, Update.class })
+    @NotEmpty(message="资讯标题不能为空", groups = { Create.class, Update.class })
     private String title;
-    @Size(max = 200, message = "资讯描述长度不超过 {max} 字符")
+    @Size(max = 200, message = "资讯描述长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private String description;
-    @Size(max = 10000, message = "资讯内容长度不超过 {max} 字符")
+    @Size(max = 10000, message = "资讯内容长度不超过 {max} 字符", groups = { Create.class, Update.class })
     @NotEmpty(message="资讯内容不能为空")
     private String content;
-    @Size(max = 100, message = "关键词长度不超过 {max} 字符")
+    @Size(max = 100, message = "关键词长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private String meta_keyword;
-    @Size(max = 200, message = "关键词描述长度不超过 {max} 字符")
+    @Size(max = 200, message = "关键词描述长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private String meta_description;
 }

+ 3 - 21
src/main/java/com/backendsys/modules/cms/article/service/impl/ArticleCategoryServiceImpl.java

@@ -1,33 +1,22 @@
 package com.backendsys.modules.cms.article.service.impl;
 
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.cms.article.dao.ArticleCategoryDao;
-import com.backendsys.modules.cms.article.dao.ArticleCategoryDao;
 import com.backendsys.modules.cms.article.dao.ArticleCategoryI18nDao;
 import com.backendsys.modules.cms.article.entity.ArticleCategory;
-import com.backendsys.modules.cms.article.entity.ArticleCategory;
 import com.backendsys.modules.cms.article.entity.ArticleCategoryI18n;
 import com.backendsys.modules.cms.article.service.ArticleCategoryService;
-import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.utils.ValidationUtil;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import jakarta.validation.ConstraintViolation;
-import jakarta.validation.Validation;
-import jakarta.validation.Validator;
-import jakarta.validation.ValidatorFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
@@ -72,13 +61,6 @@ public class ArticleCategoryServiceImpl implements ArticleCategoryService {
 
         // 批量插入 (翻译字段)
         List<ArticleCategoryI18n> translations = articleCategory.getTranslations().stream()
-//            .peek(item -> {
-//                // 参数校验
-//                Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
-//                Set<ConstraintViolation<ArticleCategoryI18n>> violations = validator.validate(item);
-//                if (!violations.isEmpty()) throw new CustException(violations.iterator().next().getMessage());
-//            })
-//            .peek(ValidationUtil::validateObject)
             .peek(item -> { ValidationUtil.validateObject(item, ArticleCategoryI18n.Create.class); })
             .map(item -> { item.setArticle_category_id(article_category_id); return item; })
             .collect(Collectors.toList());
@@ -105,14 +87,14 @@ public class ArticleCategoryServiceImpl implements ArticleCategoryService {
 
         // 批量更新 (翻译字段)
         List<ArticleCategoryI18n> translations = articleCategory.getTranslations().stream()
-                .map(t -> { t.setArticle_category_id(article_category_id); return t; })
-                .collect(Collectors.toList());
+            .peek(item -> { ValidationUtil.validateObject(item, ArticleCategoryI18n.Update.class); })
+            .map(t -> { t.setArticle_category_id(article_category_id); return t; })
+            .collect(Collectors.toList());
         articleCategoryI18nDao.updateBatch(translations);
 
         return Map.of("article_category_id", article_category_id);
     }
 
-
     /**
      * 删除资讯分类
      */

+ 3 - 11
src/main/java/com/backendsys/modules/cms/article/service/impl/ArticleServiceImpl.java

@@ -8,13 +8,11 @@ import com.backendsys.modules.cms.article.entity.Article;
 import com.backendsys.modules.cms.article.entity.ArticleI18n;
 import com.backendsys.modules.cms.article.service.ArticleService;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
+import com.backendsys.modules.common.utils.ValidationUtil;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import jakarta.validation.ConstraintViolation;
-import jakarta.validation.Validation;
-import jakarta.validation.Validator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -71,16 +69,9 @@ public class ArticleServiceImpl implements ArticleService {
 
         Long article_id = article.getId();
 
-
-
         // 批量插入 (翻译字段)
         List<ArticleI18n> translations = article.getTranslations().stream()
-            .peek(item -> {
-                // 参数校验
-                Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
-                Set<ConstraintViolation<ArticleI18n>> violations = validator.validate(item);
-                if (!violations.isEmpty()) throw new CustException(violations.iterator().next().getMessage());
-            })
+            .peek(item -> { ValidationUtil.validateObject(item, ArticleI18n.Create.class); })
             .map(item -> { item.setArticle_id(article_id); return item; })
             .collect(Collectors.toList());
         articleI18nDao.insertBatch(translations);
@@ -106,6 +97,7 @@ public class ArticleServiceImpl implements ArticleService {
 
         // 批量更新 (翻译字段)
         List<ArticleI18n> translations = article.getTranslations().stream()
+            .peek(item -> { ValidationUtil.validateObject(item, ArticleI18n.Update.class); })
             .map(t -> { t.setArticle_id(article_id); return t; })
             .collect(Collectors.toList());
         articleI18nDao.updateBatch(translations);

+ 1 - 3
src/main/java/com/backendsys/modules/cms/navigation/entity/NavigationI18n.java

@@ -15,10 +15,8 @@ public class NavigationI18n {
     public static interface Update{}
     public static interface Delete{}
 
-    @Size(max = 20, message = "菜单名称长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private Long navigation_id;
-
-    @NotEmpty(message="language 不肥为空")
+    @NotEmpty(message="语言不能为空")
     private String language;
     @Size(max = 20, message = "菜单名称长度不超过 {max} 字符", groups = { Create.class, Update.class })
     private String navigation_name;

+ 6 - 3
src/main/java/com/backendsys/modules/cms/navigation/service/impl/NavigationServiceImpl.java

@@ -2,11 +2,13 @@ package com.backendsys.modules.cms.navigation.service.impl;
 
 import cn.hutool.core.util.IdUtil;
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.cms.article.entity.ArticleCategoryI18n;
 import com.backendsys.modules.cms.navigation.dao.NavigationDao;
 import com.backendsys.modules.cms.navigation.dao.NavigationI18nDao;
 import com.backendsys.modules.cms.navigation.entity.Navigation;
 import com.backendsys.modules.cms.navigation.entity.NavigationI18n;
 import com.backendsys.modules.cms.navigation.service.NavigationService;
+import com.backendsys.modules.common.utils.ValidationUtil;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
@@ -37,7 +39,6 @@ public class NavigationServiceImpl implements NavigationService {
         return new PageInfoResult(list).toEntity();
     }
 
-
     /**
      * 获取导航详情
      */
@@ -64,7 +65,8 @@ public class NavigationServiceImpl implements NavigationService {
 
         // 批量插入 (翻译字段)
         List<NavigationI18n> translations = navigation.getTranslations().stream()
-            .map(t -> { t.setNavigation_id(navigation_id); return t; })
+            .peek(item -> { ValidationUtil.validateObject(item, NavigationI18n.Create.class); })
+            .map(item -> { item.setNavigation_id(navigation_id); return item; })
             .collect(Collectors.toList());
         navigationI18nDao.insertBatch(translations);
 
@@ -88,7 +90,8 @@ public class NavigationServiceImpl implements NavigationService {
 
         // 批量更新 (翻译字段)
         List<NavigationI18n> translations = navigation.getTranslations().stream()
-            .map(t -> { t.setNavigation_id(navigation_id); return t; })
+            .peek(item -> { ValidationUtil.validateObject(item, NavigationI18n.Update.class); })
+            .map(item -> { item.setNavigation_id(navigation_id); return item; })
             .collect(Collectors.toList());
         navigationI18nDao.updateBatch(translations);
 

+ 5 - 4
src/main/java/com/backendsys/modules/common/utils/ValidationUtil.java

@@ -7,6 +7,7 @@ import jakarta.validation.ConstraintViolation;
 import jakarta.validation.Validation;
 import jakarta.validation.Validator;
 
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -17,10 +18,10 @@ public class ValidationUtil {
     public static <T> void validateObject(T object, Class<?>... groups) {
         Set<ConstraintViolation<T>> violations = validator.validate(object, groups);
         if (!violations.isEmpty()) {
-            String errorMessage = violations.stream()
-                    .map(ConstraintViolation::getMessage)
-                    .collect(Collectors.joining(", "));
-            throw new CustException(errorMessage);
+            Optional<ConstraintViolation<T>> violation = violations.stream().findFirst();
+            String errorMessage = violation.get().getMessage();
+            String propertyName = violation.get().getPropertyPath().toString();
+            throw new CustException(errorMessage, ResultEnum.PARAMETER_EXCEPTION.getCode(), "Field: " + propertyName);
         }
     }