我有一个@RestController
生成application/hal+json
的{{1}}。通常情况下,我会返回Resource
Link
由ControllerLinkBuilder
创建的@RequestParam
。当我将@GetMapping("objects")
Resource<?> fetchObjects(@Validated Query query) {
...
return new Resource(..., linkTo(methodOn(getClass()).fetchObjects(query));
}
用于逐个传递给映射方法的所有查询参数时,这非常有效。
对于具有多个过滤选项的搜索端点,我创建了一个包含所有选项作为属性的POJO,Spring会自动将所有匹配的查询参数放入该对象中。如果需要,我甚至可以对该对象进行bean验证:
private Link createQueryLink(Query query) {
UriComponentsBuilder link = linkTo(methodOn(getClass()).fetchObjects(query))
.toUriComponentsBuilder();
Optional.ofNullable(query.getFoo()).ifPresent(foo -> link.queryParam("foo", foo));
...
return new Link(link.build().toUriString(), Link.REL_SELF);
}
但链接构建器不执行反向映射,因此不会添加任何查询参数。
是否有任何优雅的方式,而不是由签名中的所有成员替换查询对象?到目前为止,我找到的唯一方法是(从我的观点来看有点笨拙):
$statement->getWrappedStatement()->nextRowset();
$newIDNum = $statement->fetchAll();
PS:我使用的是Spring Boot 1.5.7.RELEASE