2017-05-16 75 views
5

dk max int zorlamak eğer bu prop varsa. Eğer mevcut değilse, varsayılan değer 25'dir.Bahar @value açıklama varsayılan bir değer belirterek, ben <code>@Value</code> ile açıklamalı aşağıdaki alan var

Bir adım daha ileriye gitmek istiyorum, ancak bu int alanında bir min ve maks. Zorlayarak, tam sayı olarak 100'den küçük bir yüzdeyi temsil ettiği için, ve Murphy'nin yasası birileri (muhtemelen ben) mülkiyeti harici olarak yanlış yapılandırabiliyor demektir ve benim uygulamam çalışma zamanında tuhaf şeyler yapmaya başlayacaktı, ki bu benim sevdiğim için çok geç. Uygulama başlatılırken özellik "101" veya "-1" olarak ayarlanmışsa, atılacak bir hata istiyorum. Heck, @Value ek açıklamasında 101 değerine ayarlamayı denediğimde bir hata atılmasını istiyorum, ancak bu sorunun amaçları için önemli değil. İşte denedim ne:

//@Min and @Max don't produce the intended behavior when combined with @Value 
@Min(0) 
@Max(100) 
@Value("${tolerance.percentage:25}") 
private int tolerance; 

Ben @Value farkında olduğunun int sahada min ve max uygulayabilir miyim?

+0

'. 'prototype'), o zaman fasulye validasyonu (otomatik olarak) tetikleyeceğinizi sanmıyorum ... –

+3

Normal sınıflarda değil, sadece @ ConfigurationProperties sınıflarında doğrulama alacaksınız.Bu değerleri doğrulamak istiyorsanız Menüyü kontrol etmek için '@ PostConstruct' yöntemini ekleyin ya da yapıcıya enjekte edin ve oradaki doğrulamayı yapın. –

+0

@ M.Deinum Pojo'ma '@ ConfigurationProperties' eklendikten sonra, ek açıklamaları ekledikten sonra birlikte çalışmaya başladı. Onların yaptıklarını düşündüm. bir cevap olarak kabul edeceğim. – JellyRaptor

cevap

4

Düzenli doğrulama kullanarak doğrulama API ek açıklamaları yalnızca belirli durumlarda çalışır.

  1. Sen sınıf yolunda
  2. onlar Bunun yerine olanlarla @Value kullanmanın muhtemelen istediğiniz externalized configuration

bağlamak için kullanılır edilir sınıfı üzerinde ('-doğrulayıcı hazırda bekleme') bir uygulaması Beklenen özellikleri içeren bir sınıf oluşturun ve @ConfigurationProperties ile ciltleme kullanın. (ve bunun yerine @Range'u kullanmak isteyebilirsiniz).

@ConfigurationProperties(prefix="tolerance") 
public ToleranceProperties { 

    @Range(min=1, max=100) 
    private int percentage = 25; 

    // Here be a getter/setter 
} 

bir @Configuration sınıfına birlikte bu @ EnableConfigurationProperties(ToleranceProperties.class) eklemek ve bunu her yerde özelliklerini ihtiyaç kullanabilirsiniz. (Referans kılavuzunda typesafe configuration properties görün

Not:. Ayrıca olarak ilan olabilecek bir @Component

o fasulyeyi olarak varsa Value` (başlangıç ​​anda singletons için, emin değilim değeri enjekte @
+0

Bu setin çalışması için bu setterin zorunlu olduğunu ekleyeceğim, getter ise – Zotov

+0

Olmazsa bu "getter" olmadan gerçek bir anlam ifade etmiyor, değeri nasıl alacaksınız? (başka bir birleşik özelliğin parçası değilse). –

+0

'@ ComponentProperties' ile '@ Component 'ifadesini ekleyebilir ve bu bileşen bu özellikleri dahili olarak kullanır. – Zotov