Мой 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 $ фильтр требование