diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/FileMsgDTO.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/FileMsgDTO.java index d030c6d..0b487d0 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/FileMsgDTO.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/FileMsgDTO.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; /** @@ -20,12 +22,15 @@ import java.io.Serializable; public class FileMsgDTO implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("大小(字节)") + @NotNull private Long size; @ApiModelProperty("下载地址") + @NotBlank private String url; @ApiModelProperty("文件名(带后缀)") + @NotBlank private String fileName; } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/SoundMsgDTO.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/SoundMsgDTO.java index 2b2fac9..e965eea 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/SoundMsgDTO.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/SoundMsgDTO.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; /** @@ -20,11 +22,14 @@ import java.io.Serializable; public class SoundMsgDTO implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("大小(字节)") + @NotNull private Long size; @ApiModelProperty("时长(秒)") + @NotNull private Integer second; @ApiModelProperty("下载地址") + @NotBlank private String url; } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/VideoMsgDTO.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/VideoMsgDTO.java index 0fcf2ba..49136ac 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/VideoMsgDTO.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/msg/VideoMsgDTO.java @@ -9,7 +9,6 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; -import java.math.BigDecimal; /** * Description: 视频消息入参 @@ -23,20 +22,23 @@ import java.math.BigDecimal; public class VideoMsgDTO implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("大小(字节)") + @NotNull private Long size; @ApiModelProperty("下载地址") + @NotBlank private String url; @ApiModelProperty("缩略图宽度(像素)") @NotNull - private Integer thumbWidth = BigDecimal.ROUND_HALF_DOWN; + private Integer thumbWidth; @ApiModelProperty("缩略图高度(像素)") @NotNull private Integer thumbHeight; @ApiModelProperty("缩略图大小(字节)") + @NotNull private Long thumbSize; @ApiModelProperty("缩略图下载地址") diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/exception/GlobalExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/exception/GlobalExceptionHandler.java index fad1667..3a986e1 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/exception/GlobalExceptionHandler.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/exception/GlobalExceptionHandler.java @@ -22,7 +22,7 @@ public class GlobalExceptionHandler { e.getBindingResult().getFieldErrors().forEach(x -> errorMsg.append(x.getField()).append(x.getDefaultMessage()).append(",")); String message = errorMsg.toString(); log.info("validation parameters error!The reason is:{}", message); - return ApiResult.fail(-1, message.substring(0, message.length() - 1)); + return ApiResult.fail(CommonErrorEnum.PARAM_VALID.getErrorCode(), message.substring(0, message.length() - 1)); } /** @@ -34,7 +34,7 @@ public class GlobalExceptionHandler { e.getBindingResult().getFieldErrors().forEach(x -> errorMsg.append(x.getField()).append(x.getDefaultMessage()).append(",")); String message = errorMsg.toString(); log.info("validation parameters error!The reason is:{}", message); - return ApiResult.fail(-1, message.substring(0, message.length() - 1)); + return ApiResult.fail(CommonErrorEnum.PARAM_VALID.getErrorCode(), message.substring(0, message.length() - 1)); } /** diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/AssertUtil.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/AssertUtil.java index 77e5102..0301132 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/AssertUtil.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/utils/AssertUtil.java @@ -3,16 +3,83 @@ package com.abin.mallchat.common.common.utils; import cn.hutool.core.util.ObjectUtil; import com.abin.mallchat.common.common.exception.BusinessErrorEnum; import com.abin.mallchat.common.common.exception.BusinessException; +import com.abin.mallchat.common.common.exception.CommonErrorEnum; import com.abin.mallchat.common.common.exception.ErrorEnum; +import org.hibernate.validator.HibernateValidator; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; import java.text.MessageFormat; -import java.util.Objects; +import java.util.*; /** * 校验工具类 */ public class AssertUtil { + /** + * 校验到失败就结束 + */ + private static Validator failFastValidator = Validation.byProvider(HibernateValidator.class) + .configure() + .failFast(true) + .buildValidatorFactory().getValidator(); + + /** + * 全部校验 + */ + private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + + /** + * 注解验证参数(校验到失败就结束) + * @param obj + */ + public static void fastFailValidate(T obj) { + Set> constraintViolations = failFastValidator.validate(obj); + if (constraintViolations.size() > 0) { + throwException(CommonErrorEnum.PARAM_VALID,constraintViolations.iterator().next().getMessage()); + } + } + + /** + * 注解验证参数(全部校验,抛出异常) + * @param obj + */ + public static void allCheckValidateThrow(T obj) { + Set> constraintViolations = validator.validate(obj); + if (constraintViolations.size() > 0) { + StringBuilder errorMsg = new StringBuilder(); + Iterator> iterator = constraintViolations.iterator(); + while (iterator.hasNext()) { + ConstraintViolation violation = iterator.next(); + //拼接异常信息 + errorMsg.append(violation.getPropertyPath().toString()).append(":").append(violation.getMessage()).append(","); + } + //去掉最后一个逗号 + throwException(CommonErrorEnum.PARAM_VALID, errorMsg.toString().substring(0, errorMsg.length() - 1)); + } + } + + + /** + * 注解验证参数(全部校验,返回异常信息集合) + * @param obj + */ + public static Map allCheckValidate(T obj) { + Set> constraintViolations = validator.validate(obj); + if (constraintViolations.size() > 0) { + Map errorMessages= new HashMap<>(); + Iterator> iterator = constraintViolations.iterator(); + while (iterator.hasNext()) { + ConstraintViolation violation = iterator.next(); + errorMessages.put(violation.getPropertyPath().toString(),violation.getMessage()); + } + return errorMessages; + } + return new HashMap<>(); + } + //如果不是true,则抛异常 public static void isTrue(boolean expression, String msg) { if (!expression) { diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/msg/TextMsgReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/msg/TextMsgReq.java index a58d6b8..4ccfee4 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/msg/TextMsgReq.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/domain/vo/request/msg/TextMsgReq.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import java.util.List; /** @@ -19,6 +21,8 @@ import java.util.List; @NoArgsConstructor public class TextMsgReq { + @NotBlank(message = "内容不能为空") + @Size(max = 1024, message = "消息内容过长,服务器扛不住啊,兄dei") @ApiModelProperty("消息内容") private String content; @@ -26,5 +30,6 @@ public class TextMsgReq { private Long replyMsgId; @ApiModelProperty("艾特的uid") + @Size(max = 10, message = "一次别艾特这么多人") private List atUidList; } diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java index 529c3bf..0ce1c21 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/FileMsgHandler.java @@ -6,6 +6,7 @@ import com.abin.mallchat.common.chat.domain.entity.Message; import com.abin.mallchat.common.chat.domain.entity.msg.FileMsgDTO; import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra; import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum; +import com.abin.mallchat.common.common.utils.AssertUtil; import com.abin.mallchat.custom.chat.domain.vo.request.ChatMessageReq; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,6 +30,8 @@ public class FileMsgHandler extends AbstractMsgHandler { @Override public void checkMsg(ChatMessageReq request, Long uid) { + FileMsgDTO body = BeanUtil.toBean(request.getBody(), FileMsgDTO.class); + AssertUtil.allCheckValidateThrow(body); } @Override diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java index 91ae4f9..6e2cf98 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/ImgMsgHandler.java @@ -6,6 +6,7 @@ import com.abin.mallchat.common.chat.domain.entity.Message; import com.abin.mallchat.common.chat.domain.entity.msg.ImgMsgDTO; import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra; import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum; +import com.abin.mallchat.common.common.utils.AssertUtil; import com.abin.mallchat.custom.chat.domain.vo.request.ChatMessageReq; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,6 +30,8 @@ public class ImgMsgHandler extends AbstractMsgHandler { @Override public void checkMsg(ChatMessageReq request, Long uid) { + ImgMsgDTO body = BeanUtil.toBean(request.getBody(), ImgMsgDTO.class); + AssertUtil.allCheckValidateThrow(body); } @Override diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java index 84aae0d..470df61 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/SoundMsgHandler.java @@ -6,6 +6,7 @@ import com.abin.mallchat.common.chat.domain.entity.Message; import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra; import com.abin.mallchat.common.chat.domain.entity.msg.SoundMsgDTO; import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum; +import com.abin.mallchat.common.common.utils.AssertUtil; import com.abin.mallchat.custom.chat.domain.vo.request.ChatMessageReq; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,6 +30,8 @@ public class SoundMsgHandler extends AbstractMsgHandler { @Override public void checkMsg(ChatMessageReq request, Long uid) { + SoundMsgDTO body = BeanUtil.toBean(request.getBody(), SoundMsgDTO.class); + AssertUtil.allCheckValidateThrow(body); } @Override @@ -44,7 +47,7 @@ public class SoundMsgHandler extends AbstractMsgHandler { @Override public Object showMsg(Message msg) { - return msg.getExtra().getFileMsg(); + return msg.getExtra().getSoundMsgDTO(); } @Override diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java index 5bf8b67..d8e347a 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/TextMsgHandler.java @@ -57,8 +57,7 @@ public class TextMsgHandler extends AbstractMsgHandler { @Override public void checkMsg(ChatMessageReq request, Long uid) { TextMsgReq body = BeanUtil.toBean(request.getBody(), TextMsgReq.class); - AssertUtil.isNotEmpty(body.getContent(), "内容不能为空"); - AssertUtil.isTrue(body.getContent().length() < 500, "消息内容过长,服务器扛不住啊,兄dei"); + AssertUtil.allCheckValidateThrow(body); //校验下回复消息 if (Objects.nonNull(body.getReplyMsgId())) { Message replyMsg = messageDao.getById(body.getReplyMsgId()); @@ -66,7 +65,6 @@ public class TextMsgHandler extends AbstractMsgHandler { AssertUtil.equal(replyMsg.getRoomId(), request.getRoomId(), "只能回复相同会话内的消息"); } if (CollectionUtil.isNotEmpty(body.getAtUidList())) { - AssertUtil.isFalse(body.getAtUidList().size() > 10, "一次别艾特这么多人"); List atUidList = body.getAtUidList(); Map batch = userInfoCache.getBatch(atUidList); AssertUtil.equal(atUidList.size(), batch.values().size(), "@用户不存在"); diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java index ae967c7..f2bef5f 100644 --- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java +++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/strategy/msg/VideoMsgHandler.java @@ -6,6 +6,7 @@ import com.abin.mallchat.common.chat.domain.entity.Message; import com.abin.mallchat.common.chat.domain.entity.msg.MessageExtra; import com.abin.mallchat.common.chat.domain.entity.msg.VideoMsgDTO; import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum; +import com.abin.mallchat.common.common.utils.AssertUtil; import com.abin.mallchat.custom.chat.domain.vo.request.ChatMessageReq; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,6 +30,8 @@ public class VideoMsgHandler extends AbstractMsgHandler { @Override public void checkMsg(ChatMessageReq request, Long uid) { + VideoMsgDTO body = BeanUtil.toBean(request.getBody(), VideoMsgDTO.class); + AssertUtil.allCheckValidateThrow(body); } @Override