1. 程式人生 > >自定義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;
    }

使用預設的敏感詞 3.2靈活使用敏感詞 我亞索賊6

寫程式碼的時候發現:如果Controller層返回的物件沒有getter和setter會丟擲org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation異常