Senaryo
Template modundaki #{...} bloğu içine çok satırlı JEXL Script yazılabilir. Bu yöntemle:
- JSON array elemanları üzerinde döngü kurulabilir.
- Toplama, sayaç ve filtreleme işlemleri yapılabilir.
if/else ile koşullu çıktı üretilebilir.
Body’den JSONPath ile çekilen array değerleri, JEXL bağlamına otomatik olarak liste olarak aktarılır; for (item : koleksiyon) söz dizimiyle gezinilebilir.
JEXL Script’te return kullanılmaz. Bloğun sonundaki son ifadenin değeri otomatik olarak döndürülür.
Örnek 1: Etiket Dizisini JSON Dizisine Dönüştürme
Aşağıdaki istek body’si verilsin:
{
"name": "Karabaş",
"tags": [
{"id": 5, "name": "aşılı"},
{"id": 12, "name": "mikroçipli"}
]
}
tags dizisindeki her nesneyi özel formatta bir JSON dizisine dönüştürme:
Şablon
#{
var out = '[';
var first = true;
for (item : body.$.tags) {
if (!first) { out = out + ','; }
out = out + '{"id":' + item.id + ',"label":"' + item.name + '"}';
first = false;
}
out + ']'
}
Satır Yapılandırması
| Alan | Değer |
|---|
| Oluşturma Modu | Template |
| Şablon | Yukarıdaki JEXL Script bloğu |
| Hedef | Özel Değişken → tagList |
| Varsayılan Değer | [] |
Beklenen Çıktı
[{"id":5,"label":"aşılı"},{"id":12,"label":"mikroçipli"}]
Örnek 2: Sipariş Kalemlerini Toplama
Aşağıdaki istek body’si verilsin:
{
"orderId": "ORD-001",
"items": [
{"name": "Ürün A", "price": 120.00},
{"name": "Ürün B", "price": 85.50},
{"name": "Ürün C", "price": 44.50}
]
}
Kalem fiyatlarının toplamını hesaplama:
Şablon
#{
var total = 0;
for (item : body.$.items) {
total = total + item.price;
}
total
}
Satır Yapılandırması
| Alan | Değer |
|---|
| Oluşturma Modu | Template |
| Şablon | Yukarıdaki JEXL Script bloğu |
| Hedef | Özel Değişken → orderTotal |
| Varsayılan Değer | 0 |
Beklenen Çıktı
Örnek 3: Koşullu Filtreleme ile Aktif Öğeleri Seçme
Yalnızca active: true olan öğeleri ayıklama:
Şablon
#{
var out = '[';
var first = true;
for (item : body.$.items) {
if (item.active == true) {
if (!first) { out = out + ','; }
out = out + '"' + item.name + '"';
first = false;
}
}
out + ']'
}
Beklenen Çıktı
items: [{"name":"A","active":true},{"name":"B","active":false},{"name":"C","active":true}] için:
Örnek 4: if/else ile Rol Bazlı Yetki Seviyesi
Body’den gelen kullanıcı rolüne göre yetki seviyesi belirleme:
Şablon
#{
var role = body.$.user.role;
if (role == 'admin') {
'TAM_YETKİ'
} else if (role == 'manager') {
'KISITLI_YETKİ'
} else {
'SADECE_OKUMA'
}
}
Satır Yapılandırması
| Alan | Değer |
|---|
| Oluşturma Modu | Template |
| Şablon | Yukarıdaki JEXL Script bloğu |
| Hedef | Özel Değişken → permissionLevel |
| Varsayılan Değer | SADECE_OKUMA |
Sonuç
user.role Değeri | permissionLevel |
|---|
admin | TAM_YETKİ |
manager | KISITLI_YETKİ |
viewer veya diğer | SADECE_OKUMA |
| (boş) | SADECE_OKUMA |
Örnek 5: Array Body’den İlk Elemana Erişim
İstek body’si doğrudan bir JSON dizisi olduğunda ($[n] söz dizimi):
[
{"id": 101, "name": "Birinci Kayıt"},
{"id": 102, "name": "İkinci Kayıt"}
]
Şablon
Sonuç
| Şablon | Çıktı |
|---|
#{body.$[0].name} | Birinci Kayıt |
#{body.$[1].id} | 102 |
Karmaşık mantık için Script Politikası: JEXL Script döngüler ve basit mantık için uygundur. Dış servise çağrı, kapsamlı veri dönüşümü veya hata yönetimi gerektiren senaryolarda Script politikasını tercih edin.
JEXL Script bloğunda { ve } karakterleri dengeli kullanıldığında sorunsuz çalışır. Script içinde bir JSON string üretiyorsanız aynı #{...} bloğunun içinde serbestçe {} kullanabilirsiniz.