Разделить и проверить выражение сравнения в Java - PullRequest
0 голосов
/ 23 сентября 2018

Я строю службу отдыха.Мой сервисный метод Resource выглядит следующим образом:

public Response<List<AuditEvent>> getAuditEvents(@QueryParam("filters") List<AuditRequest.Filter> filters,
                                                 @QueryParam("orderBy") @DefaultValue("id") String order,
                                                 @QueryParam("isDesc") @DefaultValue("true") boolean desc,
                                                 @QueryParam("startTime") long startTimestamp,
                                                 @QueryParam("endTime") long endTimestamp,
                                                 @QueryParam("limit") @DefaultValue("20") int size,
                                                 @QueryParam("offset") @DefaultValue("0") int startIndex)

Здесь фильтры могут иметь несколько выражений, например:

/api/audit/query/?filters=username='admin'&filters=customerId=1&limit=1&orderBy=rowId&isDesc=false&offset=2

Я также создал класс Filter:

public static class Filter {
    private String propertyId;
    private String op;
    private Object value;

}

Пожалуйста, предложите мне хороший подход для преобразования List<String>, получаемого в методе Resource, в List<Filters>, а также проверки правильности каждого выражения String.По сути, мне нужен анализатор для преобразования этого строкового выражения в мой объект фильтра, где оператор может быть любым допустимым оператором.

1 Ответ

0 голосов
/ 23 сентября 2018

Я думаю, что ваш запрос не ясен и скуден.

Обратите внимание:

https://github.com/jirutka/rsql-parser

Несколько примеров:

  • name == "Убить Билла"; год = gt = 2003
  • name == "Убить Билла" и год> 2003
  • genres = in = (научная фантастика, действие); (режиссер== «Кристофер Нолан», актер == * Бейл); год = ge = 2000
  • жанры = in = (научно-фантастический, боевик) и (режиссер == 'Кристофер Нолан' или актер == *Bale) и год> = 2000
  • Director.lastName == Nolan; год = ge = 2000; год = lt = 2010

Если вы хотите написать собственное решение, пожалуйста,рассмотрим матричные переменные: filters = name = abc; age> 40; ....

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...