验证Spring Hateoas Pageable参数

时间:2016-03-31 12:09:28

标签: java spring validation elasticsearch spring-hateoas

我应该如何在Spring Hateoas中有效使用Pageable参数?即我有简单的场景(使用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 param的验证是否有任何好的做法?

1 个答案:

答案 0 :(得分:3)

我一直在寻找一种验证Pageable或Sort实例的方法,但看起来无法使用@Valid或@Validated进行验证,即使使用自己的验证器也是如此。 Spring根本不会对这些特定参数调用validate()。

我认为执行验证的唯一方法是扩展PageableArgumentResolver或PageableHandlerMethodArgumentResolver以包含缺少的验证逻辑。