【问题标题】:Disassemble links into entities in Spring Hateoas在 Spring Hateoas 中将链接分解为实体
【发布时间】:2015-04-18 15:32:23
【问题描述】:

也许另一个人偶然发现了这个主题并找到了一个不错的解决方案。在 Spring HATEOAS 项目的帮助下使用 HATEOAS REST 方法可以很好地建立到资源的链接。但最后,要将展平的资源映射回实体对象树,我需要拆解我的链接并查询持久化后端。给出的示例,我有一个实体 Item,引用 ItemType(多对一)。 item 的自然键是 ItemType 外键和 Item 代码本身的组合。我使用链接构建器在 ItemController 中映射的 URL 是

@RequestMapping("/catalog/items/{itemTypeCode}_{itemCode}")

现在一个项目的唯一链接是例如http://www.sample.com/catalog/items/p_abc123

为了反转这个链接,我做了一些非常难看的字符串工作:

@Override
public Item fromLink(Link link) {
    Assert.notNull(link);
    String baseLink = linkTo(ColorTypeController.class).toString() + "/";
    String itemTypeAndItemPart = link.getHref().replace(baseLink, "");
    int indexOfSplit = itemTypeAndItemPart.indexOf('_');
    ItemType itemType = new ItemType();
    itemType.setCode(itemTypeAndItemPart.substring(0, indexOfSplit));
    Item item = new Item();
    item.setItemType(itemType);
    item.setCode(itemTypeAndItemPart.substring(indexOfSplit + 1));
    return item;
}

我一直在想,如果没有更好和更灵活的方法(当心任何查询字符串部分,这会破坏代码)来执行此反向映射。实际上,我不想从控制器中调用另一个 MVC 控制器,但以某种方式利用调度程序 servlet 反汇编函数将 URL 解构为更方便使用的东西会很好。对我有什么有用的提示吗?谢谢很多:)

【问题讨论】:

    标签: spring-mvc spring-boot spring-hateoas


    【解决方案1】:

    您可以使用UriTemplate。它的match 方法返回从URI 中提取的变量及其值的映射。例如:

    UriTemplate uriTemplate = new UriTemplate("/catalog/items/{itemTypeCode}_{itemCode}");
    Map<String, String> variables = uriTemplate.match("http://www.sample.com/catalog/items/p_abc123");
    String itemTypeCode = variables.get("itemTypeCode"); // "p"
    String itemCode = variables.get("itemCode"); // "abc123"
    

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2016-04-14
      • 2016-05-23
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多