Nahrádzanie premenných v stringu v Springu

2019/02/10

Spring má geniálne vymyslený systém properties, kde možno ukladať rozličné konfiguračné nastavenia v prostredí (Environment) a robiť s tým kdejaké finty. Čo keď však potrebujeme úplne hlúpu vec: nahradiť premenné v reťazci konkrétnymi namapovanými hodnotami?

Zoberme si reťazec:

http://${hostname}/${path}

Zoberme si dve premenné — host s hodnotou localhost a path s hodnotou qofola.

Po nahradení by sme chceli získať krásnu URL:

http://localhost/qofola

Spring!

Trieda PropertyPlaceholderHelper síce nemá úplne ideálny názov, ale má dve základné metódy:

Obe dokážu zobrať reťazec a mapovanie medzi názvami premenných a ich hodnotami. Mapovanie môže byť buď v podobe starých dobrých javáckych Properties, alebo v podobe resolvera, čo je prakticky jednometódový interfejs (lambda!) kde zadefinujeme mapovanie.

Okrem toho má aj dva konštruktory, kde môžeme povedať:

Môžeme si tak vytvoriť helper pre klasický vzhľad ${premennej}, alebo zadefinovať napríklad mustachovský {{spôsob}}.

Klasika známa zo shellu či Mavenu má v Springu už zadefinované konštanty a teda môžeme si helper vytvoriť nasledovne:

PropertyPlaceholderHelper helper 
  = new PropertyPlaceholderHelper(
      SystemPropertyUtils.PLACEHOLDER_PREFIX,
      SystemPropertyUtils.PLACEHOLDER_SUFFIX);

Nahrádzanie je potom hračka:

Properties properties = new Properties();
properties.setProperty("host", "localhost");
properties.setProperty("path", "qofola");

String url = helper.replacePlaceholders(urlTemplate, properties);

Bonusový konštruktor podporuje aj ďalšie argumenty:

Helper automaticky podporuje rekurzívne kľúče aj hodnoty. Ak akýkoľvek kľúč či hodnota obsahuje vnorené kľúče, tie sa budú “rozbaľovať”, kým sa celý reťazec nepodarí úspešne ponahrádzať hodnotami.

>> Home