Редактировать: я сам решил проблему путем дополнительных экспериментов. Код кажется довольно многословным, хотя, вероятно, есть лучшее решение, которое не включает в себя приведение строк к другим вещам.
Ответ опубликован ниже.
Для моей школьной работы я предполагается создать отображение GET для получения списка всех сущностей определенного c типа. Это отображение GET должно просто возвращать все сущности, если не указан параметр, или иначе оно будет применять что-либо в хранилище сущностей для использования запроса JPQL и предоставленного параметра, который используется в качестве порядкового параметра запроса для фильтрации возвращаемых результатов.
"Если параметр запроса не предоставлен, существующая функциональность возврата всех событий должна быть сохранена. Если указано более одного параметра запроса, должен быть возвращен ответ об ошибке, указывающий, что может быть не более одного параметра. Если указан параметр «? status = XXX» со значением строки состояния, которое не соответствует перечислению AEventStatus, должен быть возвращен соответствующий ответ об ошибке. "
Я попытался изменить мое отображение GET содержит 3 необязательные переменные @RequestParameter, но я обнаружил, что это утомительная логика c -wise, чтобы проверить наличие нескольких параметров или их нет, а затем сделать что-то еще раз, основываясь на существовании того, какой параметр существует ,
Вместо этого я попробовал это (я был в середине этого, и это не завершено):
@RequestMapping(
value="/aevents",
method = RequestMethod.GET)
public ResponseEntity<Object> getAllAEvents(HttpServletRequest request) {
if (request.getParameterMap().size() == 0) {
return ResponseEntity.status(HttpStatus.OK).body(repository.findAll());
}
if (request.getParameterMap().size() > 1) {
return new ResponseEntity<>("Can only handle one request paramter: title=, status= or minRegistrastions=", HttpStatus.BAD_REQUEST);
}
//incomplete from here
}
И теперь я не уверен, является ли это правильным подходом или я просто упускать из виду что-то. Я предполагаю, что смогу проверить имена параметров, которые были предоставлены в запросе, а затем снова вернуть неверный ответ на запрос, если я найду что-то, что не является допустимым параметром. Но я не уверен, как проверить карту параметров для имен параметров или если карта параметров даже делает то, что я думаю, что она делает.
Предполагается, что предоставленные параметры будут либо int, либо значением из перечисление или строка.
Я пропускаю более простой способ сделать это? то есть способ проверить количество параметров и наличие параметров в сигнатуре, например:
@GetMapping("/aevents")
public List<AEvent> getAllAEvents(@RequestParam(required = false) String title,
@RequestParam(required = false) AEventStatus status,
@RequestParam(required = false) int minRegistrations) {
//Do something here
}
Или мой нынешний подход осуществим, и если это так, как мне продолжить его?