自定義Hibernate Validator校驗註解
阿新 • • 發佈:2018-12-11
- 定義註解
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 {};
}
- 定義註解的實現邏輯類
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;
}
}
- 測試 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靈活使用敏感詞
寫程式碼的時候發現:如果Controller層返回的物件沒有getter和setter會丟擲org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
異常