Как использовать Choice Router в студии Anypoint для этого сценария? - PullRequest
0 голосов
/ 10 октября 2019

Я использовал файл RAML для генерации потоков через маршрутизатор APIKit. У меня есть example.json для примера ответа. Мой RAML-код:

 #%RAML 0.8
 ---
 title: TestEmployee API
 version: v1

 /employee:
  get:
 queryParameters:
  id:
    enum: [1,2,3,4]
    required: true
    type: string
    description: Employee id
   name:
    enum: [Charles,John,Neha,Shruti]
    required: true
    type: string
    description: Employee_name
   responses:
   200:
    body:
      application/json:
        example: !include example.json

Пример ответа JSON:

 [
 {
 "id": 1,
 "name":"Charles",
 "code": "C1ENU00",
 "dateofjoining":"2019/06/24",
 "domain":"ENU",
 "address":"Hyderabad",
 "phone": 9865458936,
 "program": "WASE"
 },
 {
 "id": 2,
 "name":"John",
 "code": "C2DIG00",
 "dateofjoining":"2019/06/24",
 "domain":"DIGITAL",
 "address":"Chennai",
 "phone": 9756359864,
 "program": "ELITE"
 }

Я хочу использовать маршрутизатор выбора для соответствующего вызова потока, когда совпадают 'id' и 'name'. Как и в параметрах запроса, если пользователь вводит «id = 1 & name = Charles», тогда только выбранный маршрутизатор будет вызывать основной поток, в противном случае он должен вызывать поток по умолчанию. Изначально полезная нагрузка устанавливается в тело «примера ответа JSON». Пожалуйста, помогите мне достичь этого.

Вот потоки для справки. Flows

1 Ответ

2 голосов
/ 14 октября 2019

Установите для атрибута when expression в выбранном маршрутизаторе выражение Dataweave, соответствующее вашему сценарию использования. Вы можете получить доступ к queryParams по имени, используя атрибуты attribute.queryParams.YOUR-QUERY-PARAM-NAME:

#[attributes.queryParams.id=='1' and attributes.queryParams.name=='Charles']

Затем добавьте область когда для каждого нужного вам маршрута и необязательное в противном случае для маршрута по умолчанию:

<choice>
    <when
        expression="#[attributes.queryParams.id=='1' and attributes.queryParams.name=='Charles']">
        <flow-ref name="some-flow" />
    </when>
    <otherwise>
        <flow-ref name="some-other-flow" />
    </otherwise>
</choice>

Для Mule 3 используйте:

#[message.inboundProperties.'http.query.params'.id == '1' &amp;&amp; message.inboundProperties.'http.query.params'.name =='Charles']
...