Проверьте массив json с помощью одного из полей, обязательных для заполнения в Mule 4 - PullRequest
2 голосов
/ 26 марта 2020

Запрос Json Похоже на следующее: -

{ 
   "eNumber": 8506493,   
   "details": [
     {
      "id":12345,
      "name": xyz123
     }
  ]
}

Как часть требования, мне нужно проверить массив "details", который должен присутствовать в поле "id" или "name". если поле «id» присутствует, «name» не является обязательным. если поле «name» присутствует, «id» не является обязательным. Выдает ошибку, если не выполнено.

Я пробовал несколько вариантов, используя фильтр массива сведений и проверяя размер фильтруемого массива в компоненте проверки. Кажется, это не работает хорошо. если у кого-то есть лучшие решения, пожалуйста, поделитесь здесь.

Ответы [ 2 ]

6 голосов
/ 26 марта 2020

Этот пример кода вернет true или false, если он пройдет ваше условие

%dw 2.0
import * from dw::core::Arrays
output application/json
---
payload.details every ((item) -> item.id? or item.name?)

Я использую функцию каждые , которая проверяет, что все элементы в массиве проходят заданный критерии.

Позже вы можете использовать выбор и использовать ошибка повышения или вы можете использовать fail dw с функцией if else.

0 голосов
/ 31 марта 2020

Вы можете ограничить его на уровне RAML. Образец RAML -

#%RAML 1.0
title: api

types:
  test1:
      type: object
      properties:
        id: 
         type: string
         example: 123a
  test2:
    type: object
    properties:
      name: 
        type: string
        example: xyz124 
      
  test3:
      type: object
      properties:
        enumber: 
          type: string
          example: 8506493a
        details : 
         type: [test1 | test2]
/test:
  post:
    body:
      application/json:
        type: test3
...