Validate Spring Hateoas Pageable param
Как мне проверить параметр Pageable в Spring Hateoas? Т.е. у меня простой сценарий (с Spring-Data-Elasticsearch):
public class Entity {
private long timestamp;
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
@Autowired
private EntitiesRepository repository
@RequestMapping(value = "list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<PagedResources<Resource<Entity>>> list(Pageable pageable, PagedResourcesAssembler<Entity> assembler){
Page<Entity> entities = repository.findAll(pageable);
PagedResources<Resource<Entity>> pagedResources = assembler.toResource(entities);
return new ResponseEntity<PagedResources<Resource<Entity>>>(pagedResources, HttpStatus.OK);
}
Все работает нормально, если я передам правильное значение для сортировки параметров, т.е. localhost:8080/app/list?sort=timestamp
, но если значение неверно (данное свойство не существует), т.е. localhost:8080/app/list?sort=name
Элитное исключение поиска:
org.elasticsearch.action.search.SearchPhaseExecutionException
Итак, мой вопрос: есть ли хорошая практика для добавления валидации параметра Pageable?
1 ответ
Я искал способ проверки экземпляра Pageable или Sort, но похоже, что они не могут быть проверены с помощью @Valid или @Validated, даже с вашим собственным валидатором. Spring просто никогда не вызывает validate() для этих конкретных параметров.
Я предполагаю, что единственный способ выполнить проверку состоит в том, чтобы расширить PageableArgumentResolver или PageableHandlerMethodArgumentResolver, чтобы включить отсутствующую логику проверки.