Spring HATEOAS Link 矩阵变量不起作用
Spring HATEOAS Link with Matrix Variable Not Working
我正在尝试从 Spring MVC 控制器生成 link 并将其添加到 RESTful 资源。我们的 API 需要使用 HTTP 矩阵变量。不幸的是,生成的 self link 缺少 URI 中的矩阵变量。
@BasePathAwareController
@RequestMapping("/licenses")
public class LicenseController {
@Autowired
private LicenseRepository repository;
@RequestMapping(path = "/{licenseId}/violations", method = RequestMethod.GET)
@RestResource(rel = "violations")
@ResponseBody
@Transactional(readOnly = true)
public ResponseEntity<?> getViolations(@PathVariable String licenseId, @MatrixVariable(name = "state") String state) {
try {
StateContextHolder.setState(state);
List<ViolationEntity> violations = repository.findOne(licenseId).getViolations();
if (violations == null) {
return new ResponseEntity<Resources<?>>(HttpStatus.OK);
}
else {
Resources<?> entityResource = new Resources(violations);
entityResource.add(linkTo(methodOn(LicenseController.class).getViolations(licenseId, state)).withSelfRel());
return new ResponseEntity<Resources<?>>(entityResource, HttpStatus.OK);
}
}
finally {
StateContextHolder.clear();
}
}
}
对于 HTTP GET /licenses/123456789;state=NY/violations,返回的自身 link 缺少状态矩阵参数:
{
...,
"_links" : {
"self" : {
"href" : "http://localhost:8080/licenses/123456789/violations"
}
}
}
我不想硬编码,所以我想弄清楚如何使用 Spring HATEOAS 或 Spring Data REST APIs 来做到这一点。
我需要使用矩阵参数来优化许可路径元素。您可以阅读有关 here 原因的更多信息。可以这么说,在 Spring 从存储库中检索实体的数据之前,我们正在执行一些自定义行为。
据我所知Spring HATEOAS 目前不支持矩阵参数。
- 看到这部分UriTemplate。它使用不同的变量类型来构建 Uri。矩阵参数不是其中之一。
- 查看 VariableType 枚举,它用于打开开关。也没有矩阵参数。
我正在尝试从 Spring MVC 控制器生成 link 并将其添加到 RESTful 资源。我们的 API 需要使用 HTTP 矩阵变量。不幸的是,生成的 self link 缺少 URI 中的矩阵变量。
@BasePathAwareController
@RequestMapping("/licenses")
public class LicenseController {
@Autowired
private LicenseRepository repository;
@RequestMapping(path = "/{licenseId}/violations", method = RequestMethod.GET)
@RestResource(rel = "violations")
@ResponseBody
@Transactional(readOnly = true)
public ResponseEntity<?> getViolations(@PathVariable String licenseId, @MatrixVariable(name = "state") String state) {
try {
StateContextHolder.setState(state);
List<ViolationEntity> violations = repository.findOne(licenseId).getViolations();
if (violations == null) {
return new ResponseEntity<Resources<?>>(HttpStatus.OK);
}
else {
Resources<?> entityResource = new Resources(violations);
entityResource.add(linkTo(methodOn(LicenseController.class).getViolations(licenseId, state)).withSelfRel());
return new ResponseEntity<Resources<?>>(entityResource, HttpStatus.OK);
}
}
finally {
StateContextHolder.clear();
}
}
}
对于 HTTP GET /licenses/123456789;state=NY/violations,返回的自身 link 缺少状态矩阵参数:
{
...,
"_links" : {
"self" : {
"href" : "http://localhost:8080/licenses/123456789/violations"
}
}
}
我不想硬编码,所以我想弄清楚如何使用 Spring HATEOAS 或 Spring Data REST APIs 来做到这一点。
我需要使用矩阵参数来优化许可路径元素。您可以阅读有关 here 原因的更多信息。可以这么说,在 Spring 从存储库中检索实体的数据之前,我们正在执行一些自定义行为。
据我所知Spring HATEOAS 目前不支持矩阵参数。
- 看到这部分UriTemplate。它使用不同的变量类型来构建 Uri。矩阵参数不是其中之一。
- 查看 VariableType 枚举,它用于打开开关。也没有矩阵参数。