我应该如何在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的验证是否有任何好的做法?
答案 0 :(得分:3)
我一直在寻找一种验证Pageable或Sort实例的方法,但看起来无法使用@Valid或@Validated进行验证,即使使用自己的验证器也是如此。 Spring根本不会对这些特定参数调用validate()。
我认为执行验证的唯一方法是扩展PageableArgumentResolver或PageableHandlerMethodArgumentResolver以包含缺少的验证逻辑。