2017-02-20 8 views
0

В настоящее время я работаю над API-интерфейсом Rest в методе get, который предполагает вернуть массив объектов в формате json. Теперь у меня есть требование сортировать результат по полю передается в качестве параметра для метода. Рассмотрим, например, объект, чтобы бытьСортировка остального получить результаты запроса по полю, переданному как параметр

public class ExampleType { 
    int firstField ; 
    String secondField ; 
} 

Теперь в соответствии с требованиями пользователя API Rest должны быть в состоянии передать в качестве параметра среди других вещей либо «Первое поле» или «secondField», и я должен быть сортировки массива, содержащего объекты результатов, использующие это поле.

По-видимому, моя модель не так проста, как пример, у меня есть более 15 полей, которые потенциально могут быть теми, которые мне нужны для сортировки, поэтому оператор else if не является выбором на данный момент. Мой вопрос: у кого-то было подобное требование для отдыха api, и если да, то как вы справились с этим? Или любая рекомендация относительно того, что потенциально может быть изящным решением моей проблемы, будет с большой благодарностью.

ответ

0

Вам необходимо создать Comparator, а затем использовать его для сортировки данных.

компараторов могут быть сохранены в статической карте, чтобы избежать переключения/случай, если/другое:

map.put("fieldName", Comparator.comparing(ExampleType::getFirstField)); 

Вы можете объединить два или более компараторов с использованием метода thenComparing.

Единственный другой вариант - создать соответствующие компараторы с использованием отражения.

Примечание: Требования потребителей API часто не являются требованиями, которые должны быть реализованы в самом API. Вы также можете считать, что вывод сортировки на самом деле является проблемой отображения, а не тем, к чему должен быть связан API.

Это зависит от ситуации, однако, если данные должны быть разбиты на страницы, у вас может не быть другого параметра, кроме как сортировать на уровне API.

+0

Вы были права предположить, что результат должен быть разбит на страницы и, следовательно, у меня нет другого выбора. Большое спасибо за помощь, которую я буду реализовывать на основе вашего предложения. – nikolis

Смежные вопросы