Разработать веб-сервис на базе сервлета, реализующий управление коллекцией объектов, и клиентское веб-приложение, предоставляющее интерфейс к разработанному веб-сервису. В коллекции необходимо хранить объекты класса HumanBeing, описание которого приведено ниже:
public class HumanBeing {
private Long id; //Поле не может быть null, Значение поля должно быть больше 0, Значение этого поля должно быть уникальным, Значение этого поля должно генерироваться автоматически
private String name; //Поле не может быть null, Строка не может быть пустой
private Coordinates coordinates; //Поле не может быть null
private java.time.LocalDateTime creationDate; //Поле не может быть null, Значение этого поля должно генерироваться автоматически
private Boolean realHero; //Поле не может быть null
private boolean hasToothpick;
private Float impactSpeed; //Поле не может быть null
private String soundtrackName; //Поле не может быть null
private WeaponType weaponType; //Поле может быть null
private Mood mood; //Поле может быть null
private Car car; //Поле не может быть null
}
public class Coordinates {
private Integer x; //Максимальное значение поля: 416, Поле не может быть null
private Long y; //Значение поля должно быть больше -700, Поле не может быть null
}
public class Car {
private String name; //Поле может быть null
private Boolean cool; //Поле может быть null
}
public enum WeaponType {
AXE,
RIFLE,
MACHINE_GUN,
BAT;
}
public enum Mood {
SORROW,
CALM,
RAGE,
FRENZY;
}
- API, реализуемый сервисом, должен соответствовать рекомендациям подхода RESTful.
- Необходимо реализовать следующий базовый набор операций с объектами коллекции: добавление нового элемента, получение элемента по ИД, обновление элемента, удаление элемента, получение массива элементов.
- Операция, выполняемая над объектом коллекции, должна определяться методом HTTP-запроса.
- Операция получения массива элементов должна поддерживать возможность сортировки и фильтрации по любой комбинации полей класса, а также возможность постраничного вывода результатов выборки с указанием размера и порядкового номера выводимой страницы.
- Все параметры, необходимые для выполнения операции, должны передаваться в URL запроса.
- Данные коллекции, которыми управляет веб-сервис, должны храниться в реляционной базе данных.
- Информация об объектах коллекции должна передаваться в формате json.
- В случае передачи сервису данных, нарушающих заданные на уровне класса ограничения целостности, сервис должен возвращать код ответа http, соответствующий произошедшей ошибке.
- Веб-сервис должен быть "упакован" в веб-приложение, которое необходимо развернуть на сервере приложений Jetty.
- Вернуть количество объектов, значение поля weaponType которых больше заданного.
- Вернуть массив объектов, значение поля weaponType которых больше заданного.
- Вернуть массив уникальных значений поля impactSpeed по всем объектам.
Эти операции должны размещаться на отдельных URL.
- Клиентское приложение может быть написано на любом веб-фреймворке, который можно запустить на сервере helios.
- Клиентское приложение должно обеспечить полный набор возможностей по управлению объектами коллекции, предоставляемых веб-сервисом -- включая сортировку, фильтрацию и постраничный вывод.
- Клиентское приложение должно преобразовывать передаваемые сервисом данные в человеко-читаемый вид -- параграф текста, таблицу и т.д.
- Клиентское приложение должно информировать пользователя об ошибках, возникающих на стороне сервиса, в частности, о том, что сервису были отправлены невалиданые данные.
Веб-сервис и клиентское приложение должны быть развёрнуты на сервере helios.