Это похоже на решаемую проблему. Насколько я знаю, решения не идеальны, но есть способы.
Предыдущая попытка, похоже, была направлена на поиск идеального решения, когда весь состав фильтра был известен в пути.
Пружина MVC заполнена
Вся совокупность динамических критериев, которые пользователь определяет, может быть передана по некоторой базовой схеме, которую вы определяете, как один параметр ключ = значение от клиента, а затем разлагается на его элементы после получения.
Вы также можете отправить два параметра: «поля» и «значения», где списки каждого из них закодированы там соответственно с некоторым осторожным разделителем по вашему выбору (это может быть закодированный специальный символ, который пользователь не может физически набрать, возможно).
Вам по-прежнему требуется, как и при любом другом подходе, когда клиентская сторона отправляет критерии (например, критерии фильтра), полная защита от любого злонамеренного использования параметров, так же, как клиент пытается внедрить в них критерии SQL (SQL-инъекция). ,
Но пока код клиента следует согласованному синтаксису, вы можете получать от них любое количество динамических параметров за один раз.
Клиент:
/products?filter=field1--value1||field2--value2||field3--value3...
Это упрощенный пример, показывающий разделители, которые слишком легко «разбить», но идея заключается в некоторой простой, даже полностью читаемой (без вреда для себя) схеме только для того, чтобы собрать вместе имена и значения полей для легкий транзит.
Сервер:
@RequestMapping(value = "/products", method = RequestMethod.GET)
public String doTheStuff(@RequestParam(value = "filter") String encodedFilter) {
.. decompose the filter here, filter everything they've sent for disallowed characters etc.