Search code examples
spring-bootannotations

Using annotations in spring boot for putting data in correct format


I have a field in my entity that holds phone-number. According to the conventions of the project, I need to save it in E.164 format in the DB. At the moment I use @PrePersist and @PreUpdate annotations for changing the phone number to the specified format. This method is good for one or two entities but it becomes very error-prone when you have to repeat it over and over.

I was thinking that it would be awesome if I could put the code in annotation and the annotation reads the fields and changes its value just before the persistence something like what @LastModifiedDate and annotation do. I searched the web for the codes of this annotation but I didn't understand how they managed it.

How I can write an annotation that reads the value of a field and changes it before persistence, and how I can do it before some specific operations like delete (I want to set some params before deleting the object too)


Solution

  • Take a look at EntityListeners.

    You can create a listener that checks your custom annotation and triggers the appropriate methods.

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface TheCustomAnnotation{
    }
    
    @Entity
    @EntityListeners(TheListener.class)
    public class TheEntity {
    
        @TheCustomAnnotation
        private String phoneNumber;
    
    
    
    public class TheListener {
    
        @PrePersist
        public void prePersist(Object target) {
            for(Field field : target.getClass().getDeclaredFields()){
              Annotation[] annotations = field.getDeclaredAnnotations();
              // Iterate annotations and check if yours is in it.
            }
        }
    

    This is just an example.