2014-11-24 12 views
11

İyi günler, Spring 4.1.1.RELEASE kullanarak bir web uygulaması üzerinde çalışıyorum. Tüm Bahar yapılandırma ek açıklamalar yapılır ve tek bir şey dışında çalışıyor edilir: Ben bu hatları ile projede bir config.properties dosyası var@Value -> 'java.lang.String' türünün değerini 'java.lang.Integer' türüne dönüştüremedi '

  • cases.caseList.filter=test 
    cases.caseList.numberOfCasesPerPage=50 
    
  • Bir yapılandırma sınıf var

    @Configuration 
    @ComponentScan(basePackageClasses={CaseConfig.class}) 
    @PropertySource(value = "classpath:config.properties") 
    public class CasesModuleTestContextConfig { ... } 
    
  • Ve başka sınıf

    @Component 
    public class HttpRequestParamsToPaginationParams extends AbstractConverter<Map<String, String>, PaginationParams> { 
    
        @Value("${cases.caseList.filter}") 
        private String filter; 
    
        @Value("${cases.caseList.numberOfCasesPerPage}") 
        private Integer count; 
    
        ... 
    } 
    

Özellik 'filtresinin değeri, özellik kaynağından başarılı bir şekilde enjekte edilir. Ama tesisin sayacın üzerindeki istisna alıyorum:

 13:58:45.274 [main] WARN o.s.c.s.GenericApplicationContext - Exception encountered during context initialization - cancelling refresh attempt 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cz.pokus.core.test.config.ConversionServiceTestConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.util.List cz.pokus.core.test.config.ConversionServiceTestConfig.converterList; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'httpRequestParamsToPaginationParams': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.Integer cz.pokus.core.cases.converter.HttpRequestParamsToPaginationParams.count; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "${cases.caseList.numberOfCasesPerPage}" 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) ~[spring-beans-4.1.1.RELEASE.jar:4.1.1.RELEASE] 
    ... 
    Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "${cases.caseList.numberOfCasesPerPage}" 
    ... 
    Caused by: java.lang.NumberFormatException: For input string: "${cases.caseList.numberOfCasesPerPage}" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_20] 
at java.lang.Integer.parseInt(Integer.java:569) ~[na:1.8.0_20] 
at java.lang.Integer.valueOf(Integer.java:766) ~[na:1.8.0_20] 
    ... 

Ben dize tesisin sayacın türünü değiştirmek zaman çalışmaya başlamak:

 @Value("${cases.caseList.numberOfCasesPerPage}") 
     private String count; 

Spring dize dönüştürmek mümkün olduğuna inanıyoruz Özellik kaynağını @Value kullanarak bir Tamsayı özelliğine enjekte ederken Tamsayı'ya. İnsanların şikayet etmeden kullandıkları örnekleri buldum. Benim için neden çalışmadığına dair bir fikrin var mı?

Çok önceden teşekkürler.

+2

Çalışıyor mu, yoksa hata yapmadan mı başlıyor? Bu durumda değerin kelimenin tam anlamıyla $ $ [cases.caseList.numberOfCasesPerPage} 'olmasını bekliyorum. 'PropertySourcesPlaceHolderConfigurer'' 'public static' bean olarak kaydettiğinizden emin olun. –

cevap

19

@Value("") ek açıklamalarını kullanarak özellik değerlerine erişmeye çalışıyorsanız, PropertySourcesPlaceholderConfigurer Bean bildirmelisiniz.

Yapılandırma sınıfınıza aşağıdaki kod snippet'ini eklemeye çalışın. beyan etmek istemiyorsanız

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

arsa değerlerini almak için, sınıfında onu Autowiring tarafından org.springframework.core.env.Environment sınıfla deneyin.

@Autowired 
private Environment environment; 

public void readValues() { 
    System.out.println("Some Message:" 
      + environment.getProperty("<Property Name>")); 

} 
+0

Bir entegrasyon testi çalıştırmaya çalışırken aynı sorunla karşılaşıyorum. Fasulyeyi '@ Yapılandırması' olarak işaretlenmiş olan 'ApplicationTest' sınıfına söylediğiniz gibi ekledim ve '@SpringApplicationConfiguration (classes = ApplicationTest.class)' kullanarak ünite sınaması tarafından yapılandırma sınıfı olarak kullanıyorum. Bu yöntemde kesme noktası vardı ve yapılandırıcının oluşturulduğunu doğruladı. Herhangi bir değişiklik yapmadı. Ben hala Vojtech – kumetix

+0

Benim gibi, NumberFormatException 'neden olduğu TypeMismatchException 'alıyorum,% yerine $ kullanılır. afedersiniz – kumetix

İlgili konular