Hibernate Validator: using if-else logic view in annotation

I use a Hibernate validator like @NotEmpty to find out if a specific property is empty or not in a class. The class looks like this:

@Entity
@Table(name="emergency_messages")
public class EmergencyMessages implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", nullable=false)
private Integer id;

@NotEmpty(message="Home message cannot be empty")
@Column(name="home_page_message")
private String homePageMessage;

@Range(min=0, max=1, message="Please select one of the display announcement value")
@Column(name="messages_enabled")
private Integer messagesEnabled;
}

So far so good. Whenever the "homePageMessage" property is empty, I see that the correct form error message is in the browser.

Now the situation has changed. The new requirement is that the "homePageMessage" property can be empty only if the other "messagesEnabled" property is set to 1. If it is set to 0, then there should be no empty confirmation for "homePageMessage". In simple words, the validation of "homePageMessage" should now depend on the value of "messagesEnabled".

: ? , .

+5
3

, ( Ajinkya Alex):

:

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;

@Target({ElementType.TYPE})  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Constraint(validatedBy=HomePageEmptyMessageValidator.class)
public @interface HomePageEmptyMessage {

String message() default "";

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

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

:

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

public class HomePageEmptyMessageValidator implements ConstraintValidator<HomePageEmptyMessage, EmergencyMessages> {

@Override
public void initialize(HomePageEmptyMessage homePageEmptyMessage) {
}

@Override
public boolean isValid(EmergencyMessages emergencyMessages, ConstraintValidatorContext context) {

    if (emergencyMessages == null) {
        return false;
    }

    Integer messageEnabled = emergencyMessages.getMessagesEnabled();
    if (messageEnabled != null) {
        if (messageEnabled == 1) {
            String homePageMessage =  emergencyMessages.getHomePageMessage();
            if (Util.isNullOrEmpty(homePageMessage)) {
                return false;
            } else {
                return true;
            }
        } else {
            return true;
        }
    }

    return false;
}

}

:

@Entity
@Table(name="emergency_messages")
@HomePageEmptyMessage(message="Home page annoucement cannot be empty if the Display  Announcement is set to Yes")
public class EmergencyMessages implements Serializable {

private static final long serialVersionUID = -7870767517772161300L; 

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", nullable=false)
private Integer id; 

@Column(name="home_page_message")
private String homePageMessage;

@Range(min=0, max=1, message="Please select one of the display announcement value")
@Column(name="messages_enabled")
private Integer messagesEnabled;
}

, -.

+2

, . hibernate , .
. .

+3

, ConstraintValidator , @Constraint.

Here you set conditions on fields that depend on others. It is assumed that restrictions that use annotations on the field should be used for verification, which can be done in the field itself and are independent of others (for example, maximum size, zeroing, etc.).

+1
source

All Articles