هل هناك أي تكوين ضروري لاستخدام الرسائل المخصصة للتحقق من صحة السبات
-
30-09-2019 - |
سؤال
أنا أستخدم الفصل التالي للتحقق من صحة الفاصولي مع التحقق من صحة السبات. إنه يعمل بشكل رائع. إنه في الأساس الذي وجده المستمع هنا بالنسبة إلى JPA 1 ، تم تحويله لاستخدامه للتحقق من صحة الفاصوليا في وحدات تحكم الربيع. أحاول تخصيص الرسائل التي تم إرجاعها. هذه وكل مورد آخر يمكنني العثور عليه يقول فقط وضع التحقق من الصحة. يتم تضمين هذا الملف أيضًا أدناه. هذا لا يعمل. أي اقتراحات؟
public class BeanValidationTool {
public void validate(Object entity) {
TraversableResolver tr = new MyTraversableResolver();
Validator validator = Validation.buildDefaultValidatorFactory().usingContext().traversableResolver(tr).getValidator();
final Set<ConstraintViolation<Object>> constraintViolations = validator.validate(entity);
if (constraintViolations.size() > 0) {
Set<ConstraintViolation<?>> propagatedViolations = new HashSet<ConstraintViolation<?>>(constraintViolations.size());
Set<String> classNames = new HashSet<String>();
for (ConstraintViolation<?> violation : constraintViolations) {
propagatedViolations.add(violation);
classNames.add(violation.getLeafBean().getClass().getName());
}
StringBuilder builder = new StringBuilder();
builder.append("validation failed for classes ");
builder.append(classNames);
throw new ConstraintViolationException(builder.toString(), propagatedViolations);
}
}
public class MyTraversableResolver implements TraversableResolver {
public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return traversableObject == null || Hibernate.isInitialized(traversableObject);
}
public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return true;
}
}
}`
التحقق من الصحة
validator.min = must be greater than or equal to {value}
validator.notEmpty = This field can't be empty
المحلول
يجب عليك تحديد Messagesource في سياق التطبيق الخاص بك:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
scope="singleton" lazy-init="default">
<property name="basename" value="ValidationMessages"/>
</bean>
أكثر من استخدام الفول لاسترداد الرسائل:
@Autowired
private MessageSource messageSource;
public String getMessage(String messageName) {
return messageSource.getMessage(messageName, null, null);
}
من أجل الوصول إلى الفاصوليا في السياق ، سيتعين عليك القيام بذلك أيضًا:
@Component
public class BeanValidationTool{...
لا تنتمي إلى StackOverflow