Существует ли библиотека OData для Java, которую я могу использовать для токенизации и поиска / замены частей сложного фильтра $ - PullRequest
0 голосов
/ 25 сентября 2018

Мой API работает по следующему URL:

http://localhost:8282/test/api/machines

Клиенты будут называть этот URL как есть, но они также могут предоставлять параметры запроса OData, такие как $ skip, $ top, $ filter и т. Д.

Один из таких примеров сложного URL-адреса:

http://localhost:8282/test/api/machines?$top=2&$filter=((externalRegionId eq 'us-west-1') or (name eq 'my-machine'))

. Бэкенд моей службы REST, обслуживающей этот URL-адрес, должен проанализировать фильтр OData $ и найти, а затем заменить некоторые его части на основена шаблоне.

Т.е. если токен фильтра равен externalRegionId , его следует заменить на regionId

$filter=((externalRegionId eq 'us-west-1') or (name eq 'my-machine'))

turns to

$filter=((regionId eq 'us-west-1') or (name eq 'my-machine'))

Очевидно, наивная строка.Подход replaceAll () не будет работать надежно для поиска / замены здесь, так как буквальная часть токена может содержать шаблон, то есть (обратите внимание на name eq part):

$filter=((externalRegionId eq 'us-west-1') or (name eq 'test-externalRegionId'))

must not turn into

$filter=((regionId eq 'us-west-1') or (name eq 'test-regionId'))

-> Как видите, я не хочу заменять буквальную часть, которая находится между '' .

Поэтому я ищу библиотеку OData tokenizer для Java, которая может этого достичьнайти-заменить OData $ фильтр требование

...