Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave では、as 演算子を使用して、型を別の型に強制的に変換できます。型強制は実行時に適用されます。
開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 のドキュメントを参照してください。
他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
期待される型に一致しないプロパティを演算子に提供した場合、DataWeave は、自動的に、提供されたプロパティを必須の型に強制的に変換しようとします。
この DataWeave 例では、String 型を使用して型 Currency を定義し、Java DecimalFormat パターン (##) を使用して値を書式設定し、as を使用して price 値を Currency 型に強制的に変換します。
<items>
    <item>
        <price>22.30</price>
    </item>
    <item>
        <price>20.31</price>
    </item>
</items>
%dw 2.0
output application/json
type Currency = String { format: "\$#,###.00"}
---
books: payload.items.*item map
    book:
        price: $.price as Currency
{
  "books": [
    {
      "book": {
        "price": "22.30"
      }
    },
    {
      "book": {
        "price": "20.31"
      }
    }
  ]
}
次の表は、可能な組み合わせと、変換で使用するスキーマからのプロパティを示しています。
| ソース | 変換先 | プロパティ | 
|---|---|---|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
|
  | 
  | 
  | 
  | 
  | 
|
  | 
  | 
|
  | 
  | 
| プロパティ | 説明 | 
|---|---|
  | 
Object (オブジェクト) 型の Java クラスを受け入れます。  | 
  | 
数値と日付を書式設定するための Java   | 
  | 
Java ロケールを受け入れます。Java   | 
  | 
日付値と時刻値の解析モード。有効な値:  
  | 
  | 
値には   | 
次の例は、mode プロパティの使用方法を示しています。LENIENT と SMART は、02/31/2020 のような無効な日付を受け取った場合でも有効な日付を返しますが、返される日付は異なります。  STRICT は、無効な日付に対してエラーを返します。例では、yyyy ではなく uuuu を使用して年を表しています。
%dw 2.0
output application/json
---
{
  examples : {
    badDateWithLenient: '02/31/2020' as Date {mode: "LENIENT", format: 'MM/dd/uuuu'},
    badDateWithSmart: '02/31/2020' as Date {mode: "SMART", format: 'MM/dd/uuuu'}
  }
}
%dw 2.0
output application/json
---
{
  "examples": {
    "badDateWithLenient": "03/02/2020",
    "badDateWithSmart": "02/29/2020"
  }
}
無効な日付に対して STRICT を使用するとエラーが返されます。次の例では、badDateWithStrict: '02/31/2020' as Date {mode: "STRICT", format: 'MM/dd/uuuu'} によってエラーが返されています。
"Cannot coerce String (02/31/2020) to Date, caused by: Text '02/31/2020' could not be parsed: Invalid date 'FEBRUARY 31'
9| 	badDateWithSmart:
    '02/31/2020' as Date {mode: "STRICT", format: 'MM/dd/uuuu'}
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
次の例では、2 つの文字列を日付形式に変換し、結果を連結します。最初の文字列は日付を表し、2 番目の文字列は時刻を表します。この変換は、as を使用して最初の文字列を LocalDateTime に強制変換してから、指定された形式の String に強制変換します。また、++ を使用して結果を連結します。
%dw 2.0
output application/json
var s1= 20201228 // (uuuuMMdd),
var s2= 1608 //(HHMM)
---
(s1 ++ s2)
as LocalDateTime {format:"uuuuMMddHHmm"}
as String {format:"MM-dd-uuuu HH:mm:ss"}
"12-28-2020 16:08:00"
次の例も、文字列を日付形式に変換します。まず、この変換は as を使用して文字列を LocalDateTime 型に強制変換してから、結果を指定された出力形式の String 型に強制変換します。
%dw 2.0
output application/json
---
"8/30/2020 4:00:13 PM"
    as LocalDateTime {format: "M/dd/uuuu h:mm:ss a"}
    as String {format: "MM/dd/uuuu"}
"08/30/2020"
次の例では、文字列を 10 進数表現の数値に変換します。数値から文字列への変換時に format はゼロを追加するため、まず文字列値 "22" を Number に変換してから String に再度変換します。入力データが数値 22 の場合、最初の Number 変換を実行する必要はありません。
後者の Number 変換では、出力を 10 進数表現の数値にします。
%dw 2.0
output application/json
---
{
     data: "22" as Number as String {format: ".00"} as Number
}
{
  "data": 22.00
}
次の例では、locale プロパティを使用して数値と日付値を書式設定します。まず、数値を String 型に型強制し、Java DecimalFormat パターン (##) と locale プロパティ en (英語) または es (スペイン語) も使用する指定された出力形式に変換します。locale: "en" プロパティでは、. を使用して出力の数値の 10 進数表現を書式設定し、locale: "es" プロパティでは、, を使用して出力を書式設定します。
次に、日付値を Date 型に型強制した後、出力形式 dd-MMM-yy と locale プロパティ en (英語) または es (スペイン語) を使用する String 型に型強制します。locale: "en" プロパティでは、月 MMM を英語で書式設定し、locale: "es" プロパティでは、月をスペイン語で書式設定します。
%dw 2.0
output application/json
---
{
    enNumber: 12.3 as String {format: "##.##", locale: "en"},
    esNumber: 12.3 as String {format: "##.##", locale: "es"},
    esDate: "2020-12-31" as Date as String {format: "dd-MMM-yy", locale: "es"},
    enDate: "2020-12-31" as Date as String {format: "dd-MMM-yy", locale: "en"}
}
{
  "enNumber": "12.3",
  "esNumber": "12,3",
  "esDate": "31-dic.-20",
  "enDate": "31-Dec-20"
}