Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom annotation not called

I have made custom annotation for validation of my bean field. I use @Age(value = 10) annotation for validation age. I have write code as below.

import java.lang.annotation.Documented;  
import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  
import javax.validation.Constraint;  
import javax.validation.Payload;  



@Documented
@Constraint(validatedBy = AgeConstraintValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Age {

    String message() default "{Age is not valid }";

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

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

    int value();
}

This is code for age constrain validator

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class AgeConstraintValidator   implements ConstraintValidator< Age, Long> {

    private Age age;

    @Override
    public void initialize(Age age) {
        this.age = age;
    }

    @Override
    public boolean isValid(Long dob, ConstraintValidatorContext context) {
        System.out.print(" age in annotion");
              if(dob != age.value()){
                     return true;
                 }
        return false;
    }

}

Now when i use @Age( value = 10) in my bean so it is not called Age annotation. Can anyone tell me any fault in my code. When i create my bean object and assign age differ for test but i can not get any validation on bean 's field .

like image 621
Anuj Dhiman Avatar asked Jan 19 '26 10:01

Anuj Dhiman


1 Answers

Spring will not take this custom annotation automatically. You have to let Spring know about by defining a BeanPostProcessor. create a class which implements it For e-g

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;

public class InitHelloWorld implements BeanPostProcessor {

   public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("BeforeInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }

   public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("AfterInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }

}

and mention about this bean in your spring config xml as below

 <bean class="<your pack>.InitHelloWorld" />
like image 128
Thanga Avatar answered Jan 22 '26 00:01

Thanga



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!