Ответ 1
Хммм. Досадно! Как я вижу, у вас есть 3 варианта:
-
Вы можете написать собственный MessageInterpolator и подставить его в свою конфигурацию проверки, но это кажется очень хрупким.
-
Вы можете объявить свою собственную аннотацию в стиле @Min (посмотреть, как сделать здесь специальный валидатор)...
-
. Но необходимая информация фактически хранится в объекте ConstraintViolation, который выходит из экземпляра Validator. Это просто, что он не попадает в сообщение по умолчанию.
Я предполагаю, что вы в настоящее время используете какую-то веб-инфраструктуру для проверки формы. Если это так, должно быть довольно просто переопределить проверку и сделать что-то вроде этого (быстрая хакерская версия, вы должны быть в состоянии сделать это очень аккуратно, используя внешний файл свойств):
Set<ConstraintViolation<MyForm>> violations = validator.validate(form); for (ConstraintViolation<MyForm> cv : violations) { Class<?> annoClass = cv.getConstraintDescriptor().getAnnotation().getClass(); if (Min.class.isAssignableFrom(annoClass)) { String errMsg = MessageFormat.format( "The value of {0}.{1} was: {2} but must not be less than {3}", cv.getRootBeanClass(), cv.getPropertyPath().toString(), cv.getInvalidValue(), cv.getConstraintDescriptor().getAttributes().get("value")); // Put errMsg back into the form as an error } }