IMO, the simplest solution is to create a separate java class, say Money , which contains both information and the type of money (i.e. currency) and the value of money.
public class Money { private Currency currency; private Double value; public Currency getCurrency() { return currency; } public void setCurrency(Currency currency) { this.currency = currency; } public Double getValue() { return value; } public void setValue(Double value) { this.value = value; } public boolean isValid() { if(getCurrency() == null || getValue() == null) { return false; }
After that, create a restriction: @ValidMoney and MoneyValidator .
public class MoneyValidator implements ConstraintValidator<ValidMoney, Money> { @Override public void initialize(ValidMoney constraintAnnotation) {
Example: -
public class Bid { @ValidMoney private Money bidAmount; }
source share