2017-04-27 41 views
9

Tôi đang sử dụng MessageSource của Spring để tải thông báo lỗi từ tệp .properties trong classpath. Thuộc tính của tôi tôn trọng một "mẫu" nhất định như {Object}.{field}.{unrespectedConstraint} Ví dụ:Khởi động mùa xuân yml Tệp ResourceBundle

userRegistrationDto.password.Size= Le mot de passe doit avoir au minimum 6 caractères. 
userRegistrationDto.email.ValidEmail= Merci de saisir une addresse mail valide. 

Trong trường hợp refactoring (Thay đổi tên của đối tượng ví dụ), tôi phải thay đổi tập tính của tôi ở một vài nơi.

Có cách nào để sử dụng một tập tin yaml (messages.yml) như là một ResourceBundle để có được một cái gì đó như:

userRegistrationDto: 
    password: 
    Size: Le mot de passe doit avoir au minimum 6 caractères. 
    email: 
    ValidEmail: Merci de saisir une addresse mail valide. 
+1

Vâng, có điều đó (tuyên bố từ chối trách nhiệm: chưa tự thử nghiệm): https://github.com/akihyro/yaml-resource-bundle – vtosh

Trả lời

1

Giải pháp tốt nhất mà tôi quản lý để tìm thấy trước khi tôi bằng cách @vtosh: sử dụng this library. Vấn đề duy nhất (nhưng vẫn) là nó không đủ phổ biến.

Tùy chọn khác có thể là mở rộng hỗ trợ bản địa hóa Java theo cách thủ công mở rộng lớp ResourceBundle.Control (bạn có thể tìm thấy ví dụ chính thức here). Nhưng tôi không thấy nhiều ý nghĩa trong nó kể từ khi thư viện @vtosh tìm thấy sử dụng cách tiếp cận này.

Tại sao không có giải pháp cho Spring? Vâng, câu trả lời bạn có thể tìm thấy trong this jira. Nó vẫn còn trong trạng thái mở vì vậy tôi không mong đợi để có bất kỳ giải pháp từ phía họ ít nhất là cho bây giờ.

1

Tôi nghĩ rằng điều này là đủ cho các yêu cầu của bạn, nếu bạn cần MessageSource có thể tải lại được trong quá trình vận hành VM, bạn có thể phải tìm hiểu thêm một chút.

@Configuration 
public class TestConfig { 

    @Bean(name = "testProperties") 
    public Properties yamlProperties() throws IOException { 
     YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean(); 
     bean.setResources(new ClassPathResource("test.yml")); 
     return bean.getObject(); 
    } 

    @Bean 
    public MessageSource messageSource() throws IOException { 
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
     messageSource.setCommonMessages(yamlProperties()); 
     return messageSource; 
    } 
} 
Các vấn đề liên quan