1. 程式人生 > >validation 自定義註解統一校驗列舉型別

validation 自定義註解統一校驗列舉型別

請大神們多多指點評論,不勝感激,有問題也可以評論提問

1.自定義介面 

@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {EnumValidtor.class})
@Documented
public @interface EnumValidAnnotation {
    String message() default "";

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

    Class<? extends Payload>[] payload() default {};

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

2.校驗列舉 

public class EnumValidtor implements ConstraintValidator<EnumValidAnnotation,String> {

    Class<?>[] cls ; //列舉類

    @Override
    public void initialize(EnumValidAnnotation constraintAnnotation) {
        cls = constraintAnnotation.target();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if(cls.length>0 ){
            for (Class<?> cl : cls
                    ) {
                try {
                    if(cl.isEnum()){
                        //列舉類驗證
                        Object[] objs = cl.getEnumConstants();
                        Method  method = cl.getMethod("name");
                        for (Object obj : objs
                                ) {
                            Object code = method.invoke(obj,null);
                            if(value.equals(code.toString())){
                                return true;
                            }
                        }
                    }
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        } else {  
                return true;   
        }  
         return false;
    }
}       

3.定義列舉類

public enum   ProductTypeEnum {
    P("原材料"), M("加工品");
}

4.使用註解 (在需要檢驗的欄位上使用註解)

@EnumValidAnnotation(message = "商品型別輸入錯誤",target = ProductTypeEnum.class )

相關推薦

validation 定義註解統一列舉型別

請大神們多多指點評論,不勝感激,有問題也可以評論提問1.自定義介面 @Target({ ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPoli

Java定義註解反射數據

sda new out 格式 是否 本地 imp 使用範圍 數據類型 package com.annotations.ecargo; import java.lang.annotation.ElementType; import java.lang.annotati

springboot-No6 : 的引入 @Constraint和定義註解進行策略的設計模式淺談

之前寫的註解校驗的不足前面寫到如何使用自定義的註解進行校驗,@FieldInfo  主要做法是在註解中加入一些需要校驗的資訊然後呢 編寫解析註解的方法,然後我們寫統一的校驗策略來進行校驗。最後在統一的呼叫這個校驗演算法來達到校驗的目的但是上面這個過程呢我們並不知道使用該註解進

Hibernate Validation定義註解

權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/cccmercy/article/details/79105624 情景:需要對String型別的屬性比如description進行驗證,驗證規則是當descript

hibernate validator定義註解實戰之《列舉

前言 在spring專案中,校驗引數功能使用hibernate validator是一個不錯的選擇,我們的專案中也是使用它來進行校驗的,省去了很多難看的校驗邏輯,使程式碼的可讀性也大大增加,本章將帶你使用hibernate validator自定義註解功能實現

定義Hibernate Validator註解

定義註解 package com.futao.springmvcdemo.annotation; import com.futao.springmvcdemo.annotation.impl.IllegalValueCheckImpl; import c

vue+element中定義表單特殊字元

本次專案基於vue和element-ui,需要在前端使用者輸入的時候去校驗輸入的內容中是否含有特殊符號,如果有,則提示使用者不支援輸入特殊符號。 校驗規則方法 export function checkSpecificKey(str) { var special

BootstrapValidator定義中文長度

原理 中文字元佔用3個長度,在原stringLength校驗方法的基礎上做了一個擴充套件。 程式 ;(function($) { $.fn.bootstrapValidator.validators.proStringLength = {

hiberbate validation 定義註解

Hibernate Validator 是 Bean Validation 的參考實現 。Hibernate Validator 提供了 JSR 303 規範中所有內建 constraint 的實現,除此之外還有一些附加的 constraint。 1.maven中引入hibernate-va

Spring AOP+反射實現定義動態配置規則,讓規則飛起來

場景小計 之前專案都是使用hibernate-validator來校驗引數,但是實際上會出現一些小問題,就是校驗規則都是通過註解的方式來完成,這樣如果專案上線了,這個引數校驗規則就沒辦法修改,如果出現校驗規則問題,就必須修改後重新緊急上線(之前因為手機

定義表單

上篇部落格簡單介紹了validate的使用,但是在有些時候validate無法滿足我們的需求,比如說校驗賬號是否已經存在或者郵箱是否已經被註冊了,這個時候就需要自己寫表單校驗了,配合著validate使用功能還是非常強大的(程式碼有點多,其實非常簡單)。 首先是引入validate外掛和jque

Spring aop+定義註解統一記錄使用者行為日誌

Spring aop+自定義註解統一記錄使用者行為日誌 原創: zhangshaolin 張少林同學 今天 寫在前面 本文不涉及過多的Spring aop基本概念以及基本用法介紹,以實際場景使用為主。 場景 我們通常有這樣一個需求:列印後臺介面

shiro 實現定義許可權規則

<span style="font-family: Arial, Helvetica, sans-serif;">在系統中使用shiro進行許可權管理,當用戶訪問沒有許可權的資源時會跳轉到

Bean Validation——定義註解

  在Bean Validation中,除了可以使用現成的校驗註解之外,我們還可以在其中自定義自己的程式碼註解校驗規則。 自定義註解——Email   下面是展示的自定義註解,實現的功能是對於電子郵箱的校驗。 建立註解介面Email package

定義控制元件失效的問題

專案做開發時,使用了一個自定義控制元件,程式碼如下:控制元件頁面段 KnowtypeCtrl.ascx:<%@ Control Language="C#" AutoEventWireup="true" CodeFile="KnowtypeCtrl.ascx.cs" In

測試開發專題:spring-boot定義返回引數錯誤資訊

之前兩篇文章 [Spring-boot自定義引數校驗註解](https://www.immortalp.com/articles/2020/05/15/1589509382896.html)和[如何在spring-boot中進行引數校驗](https://www.immortalp.com/articles/

SpringMVC定義註解進行引數(以列舉值是否合法為例)

pom引入springMVC依賴,以springboot專案為例 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

使用SpringBoot通過定義註解+AOP+全域性異常處理實現引數統一非空

一、前言         在我們寫後臺介面時,難免對引數進行非空校驗,如果一兩個還好,但如果需要寫大量的介面,及必填引數太多的時候,會給我們開發帶來大量的重複工作,及很多相似程式碼。而sping自帶的@RequestParam註解並不能完全滿足我們的需求,因為

springboot定義註解時出現的異常

異常資訊: javax.validation.ConstraintDefinitionException: HV000074 原因: 在約束註釋中它是關於groups()和payload()缺失的,只需新增這兩行就可以了: Class<?>[] groups() de

Spring Boot系列-使用定義註解使用者是否登入

摘要: 記得今年年初剛開始面試的時候,被問的最多的就是你知道Spring的兩大核心嘛?那你說說什麼是AOP,什麼是IOC?我相信你可能也被問了很多次了。 1、到底是什麼是AOP? 所謂AOP也就是面向切面程式設計,能夠讓我們在不影響原有業務功能的前提下,橫切擴充套件新的功能。 記得今年