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 目前不支持矩阵参数。

  1. 看到这部分UriTemplate。它使用不同的变量类型来构建 Uri。矩阵参数不是其中之一。
  2. 查看 VariableType 枚举,它用于打开开关。也没有矩阵参数。