2016-03-31 7 views
2

Как я могу использовать параметр pageable в Spring Hateoas? То есть У меня есть простой сценарий (с Spring-Data-Elasticsearch):Validate Spring Hateoas Pageable param

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 elasticsearch исключение:

org.elasticsearch.action.search.SearchPhaseExecutionException 

Итак, мой вопрос: любая хорошая практика, чтобы добавить валидацию выгружаемых паров?

ответ

2

Я искал способ проверки экземпляра страницы или сортировки, но похоже, что они не могут быть проверены с помощью @Valid или @Validated даже с вашим собственным валидатором. Spring просто никогда не вызывает validate() для этих конкретных параметров.

Я предполагаю, что единственный способ выполнить валидацию - это расширить возможности PageableArgumentResolver или PageableHandlerMethodArgumentResolver, чтобы включить недостающую логику проверки.

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