2011-08-17 39 views
5

Tôi có một lớp đơn giản như thế này,Làm thế nào để thêm các thông báo lỗi tùy chỉnh trong Hibernate validator

import javax.validation.constraints.NotNull; 
import org.hibernate.validator.constraints.Length; 

public class Form implements Serializable { 
    @NotNull 
    @Length(min = 2, max = 20) 
    private String lastName; 
} 

Tôi có tập tin messages.properties trong classpath. Sau đó, nó được tải qua Spring bean như sau,

<bean name="validator" 
     class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <property name="validationMessageSource"> 
     <ref bean="resourceBundleLocator"/> 
    </property> 
</bean> 

<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>classpath*:messages.properties</value> 
     </list> 
    </property> 
</bean> 

Tất cả những gì tôi muốn là nhận thông báo lỗi tùy chỉnh theo bean được xác thực. Nói cách khác, tôi muốn có mỗi đối tượng ConstraintViolation trả về thông báo lỗi mà tôi đã định nghĩa trong tệp thuộc tính của tôi thay cho tệp mặc định. Có thể thêm thuộc tính tin nhắn có giá trị như định dạng này {xxx.yyyy.zzzz} và tham khảo thông báo đó từ tệp messages.properties không?

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<Form>> inputErrors = validator.validate(form); 

Nếu tôi muốn tùy chỉnh thông báo mặc định cho @NotNull và @Length, tôi có thể làm như thế nào?

Kinh nghiệm của tôi về xác nhận Hibernate là zero, Bất kỳ mẫu mã hoặc hướng dẫn từng bước sẽ được đánh giá.

Trả lời

4

Bạn có tệp bó tài nguyên này chứa các giá trị thư.

Tôi nghĩ bạn phải sử dụng đường dẫn đến nghĩa là @NotNull chú thích để ghi đè thư đó bằng tay! như javax.validation.constraints.NotNull=Notnull error happened! hoặc thứ gì đó tương tự!

Look đây cho rằng:

Hibernate Validator - The error message

Hy vọng rằng sẽ giúp

+0

Ừ Fritz, đó là sự thật, nhưng tôi không muốn ghi đè mặc định messageTemplate con đường bởi vì tôi có nhiều @NotNull (và tất nhiên là chú thích khác) trong lớp Form của tôi. Tôi muốn thêm thông báo lỗi cụ thể cho từng thuộc tính. Có cách nào dễ dàng không ** thực hiện tùy chỉnh MessageInterpolator. Tôi tìm thấy vài triển khai nội suy tin nhắn tùy chỉnh, nhưng tôi không hiểu bất kỳ điều nào trong số này. Nếu bạn có thể cho tôi giải pháp đơn giản nhất có thể với mã nguồn đầy đủ !!. – nash

+0

Và tôi cũng cố gắng ghi đè thuộc tính thư của mỗi chú thích xác nhận bằng một định dạng như {vvvv.ssss.rrrt.message} này, nhưng khi tôi gọi hàm getMessage của ConstraintViolation nó được in như nó, không phải là thông điệp của nó. – nash

+0

Tôi hiểu rồi! cách duy nhất mà tôi nghĩ đến là tạo trình xác thực tùy chỉnh chứa thông báo! như @MyNotNull + tin nhắn ?! hoặc bạn có thể làm điều gì đó như thế này ' ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Xe ô tô = xe mới (không có); Đặt > constraintViolations = validator.validate (ô tô); assertEquals (1, constraintViolations.size()); assertEquals ("có thể không rỗng", ràng buộcViolations.iterator(). Next(). GetMessage()); ' và chặn thư trong đối tượng !? – stereoscope

Các vấn đề liên quan