[原创]自定义Hibernate Validator校验注解

简介: [原创]自定义Hibernate Validator校验注解
  1. 定义注解

package com.futao.springmvcdemo.annotation;
import com.futao.springmvcdemo.annotation.impl.IllegalValueCheckImpl;
import com.futao.springmvcdemo.model.entity.constvar.ErrorMessage;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
 * @author futao
 * Created on 2018/9/25.
 */
//关联解析类, 检验逻辑
@Constraint(validatedBy = IllegalValueCheckImpl.class)
@Target(value = {ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface IllegalValueCheck {
    /**
     * 拦截的字符串
     *
     * @return
     */
    String forbidden() default "mmp";
    /**
     * 验证不通过时的错误提示信息
     *
     * @return
     */
    String message() default ErrorMessage.CONTAIN_ILLEGAL_PARAMETER;
    Class<?>[] groups() default {};
    /**
     * 变量名称 payload不可变
     * 否则会抛出异常`javax.validation.ConstraintDefinitionException: HV000074`
     *
     * @return
     */
    Class<? extends Payload>[] payload() default {};
}
  1. 定义注解的实现逻辑类

package com.futao.springmvcdemo.annotation.impl;
import com.futao.springmvcdemo.annotation.IllegalValueCheck;
import org.apache.commons.lang3.ObjectUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 * @author futao
 * Created on 2018/9/25.
 * 敏感词检测
 */
public class IllegalValueCheckImpl implements ConstraintValidator<IllegalValueCheck, String> {
    private String forbidden;
    /**
     * 初始化
     *
     * @param constraintAnnotation
     */
    @Override
    public void initialize(IllegalValueCheck constraintAnnotation) {
        //获取禁止的词汇
        this.forbidden = constraintAnnotation.forbidden();
    }
    /**
     * 检验逻辑
     *
     * @param value
     * @param context
     * @return
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (!ObjectUtils.allNotNull(value)) {
            return true;
        }
        if (value.contains(forbidden)) {
            return false;
        }
        return true;
    }
}
  1. 测试
    3.1使用默认的敏感词

/**
     * 添加评论
     *
     * @param content
     * @return
     */
    @PostMapping(path = "addReview")
    public SingleValueResult addReview(
            @RequestParam("content")
            @IllegalValueCheck
                    String content) {
        SingleValueResult result = new SingleValueResult(content);
        return result;
    }


image.png

3.2灵活使用敏感词

/**
     * 添加评论
     *
     * @param content
     * @return
     */
    @PostMapping(path = "addReview")
    public SingleValueResult addReview(
            @RequestParam("content")
            @IllegalValueCheck(forbidden = "亚索")
                    String content) {
        SingleValueResult result = new SingleValueResult(content);
        return result;
    }


image.png


写代码的时候发现:如果Controller层返回的对象没有getter和setter会抛出org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation异常

相关文章
|
7月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
115 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
55 0
|
6月前
|
JSON Java 数据库连接
Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题
37 2
|
7月前
使用Hibernate-Validate进行参数校验
使用Hibernate-Validate进行参数校验
82 3
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
|
7月前
|
Java 数据库连接
hibernate注解实体类(Emp.java)
hibernate注解实体类(Emp.java)
|
7月前
|
Java 数据库连接
hibernate注解的测试
hibernate注解的测试
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)