当前位置: 首页 > article >正文

后端表情包依赖+自定义注解实现校验

开发过程中遇到小程序登记信息填写文本时可能输入表情包,需要后端校验

由于字段太多,所以用自定义注解的方式来实现

步骤1:在pom文件中加入表情包依赖

        <dependency>
            <groupId>com.vdurmont</groupId>
            <artifactId>emoji-java</artifactId>
            <version>5.1.1</version>
        </dependency>

步骤2:

自定义注解类

package com.company.web.compatibility.annotation;

import cn.hutool.extra.emoji.EmojiUtil;
import com.itextpdf.text.log.SysoCounter;
import com.xiaoleilu.hutool.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;

/**
 * <p>
 * 表情包自定义校验注解
 * </p>
 * @date 2023/7/12/
 */
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotBlankEmoji.EmojiValidator.class)
@Documented
public @interface NotBlankEmoji {
    String message()
            default "不允许输入表情符号";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
    class EmojiValidator implements ConstraintValidator<NotBlankEmoji, String> {

        @Override
        public void initialize(NotBlankEmoji constraintAnnotation) {

        }

        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            return !containsEmoji(value);
        }

        public boolean containsEmoji(String value)
        {
            if (StrUtil.isBlank(value)) {
                return false;
            }
            boolean emoji = EmojiUtil.containsEmoji(value);
            return emoji;
        }
    }


}

步骤3:

在请求的实体使用这个注解,需要要在controller中加入@Validated注解,校验才会生效

@ApiModel("Hr结构人员教育经历")
@Data
public class HrWorkExperienceDto {
    @ApiModelProperty("证明人")
    @NotBlank(message = "证明人不能为空" )
    @Length(max=44, message = "证明人超过了44个字符" )
    @Xss( message = "证明人不能输入html特殊字符" )
    @NotBlankEmoji( message = "证明人不允许输入表情符号" )
    private String certifier;

}


http://www.kler.cn/a/37483.html

相关文章:

  • Stable Diffusion 丝滑无闪烁AI动画 Temporalkit+Ebsynth+Controlnet
  • -bash: fork: Cannot allocate memory处理
  • VectorCAST单元测试手动配置测试用例
  • 谈谈VPN是什么、类型、使用场景、工作原理
  • pytong之语音环境:edge-tts and edge-playback
  • 使用matlab随机森林进行数据分类预测
  • MySQL的数据备份与还原--练习题
  • TJUACM假期集训个人赛(九)(cf1453a-d cf1440a-c)
  • 21复习的内容
  • 解决打开excel时报错 “不能使用对象链接和嵌入”
  • Java实现归并排序
  • TCP 协议(三)十种核心机制
  • 【Ubuntu】安装nginx并实现局域网文件共享
  • 手机图片怎么转pdf格式?这几个图片转换方式了解一下
  • 什么是微服务架构
  • 18.JavaWeb-JWT(登录、鉴权)
  • 微信小程序音频播放失败:TypeError: Cannot read property ‘duration‘ of undefined
  • Django入门
  • 分布式ELK日志文件分析系统(曾经沧海难为水,除却巫山不是云)
  • Helm 安装prometheus-stack 使用local pv持久化存储数据