将 ResourceSupport 迁移到 RepresentationModel

Migrate ResourceSupport to RepresentationModel

我有这段代码,我想将其迁移到最新的 Spring hateoas 版本。我试过这个:

@JsonInclude(Include.NON_NULL)
public class TransactionResource extends RepresentationModel {

  @JsonProperty("id")
  private UUID uuid;

  public void setUuid(UUID uuid) {
    // Remove the hateoas ID (self referential link) if exists
    if (getId() != null) {
      getLinks().remove(getId());
    }

    add(linkTo(methodOn(TransactionController.class).lookup(uuid, null))
        .withSelfRel()
        .expand());

    this.uuid = uuid;
  }
  ......................
}

我收到错误无法解析方法 'getId' in 'TransactionResource'Cannot resolve method 'remove' in 'Links'

你知道我要如何解决这个问题吗?

我认为在较新的 Spring Hateoas 版本中,您可以使用以下代码获得类似的结果:

@JsonInclude(Include.NON_NULL)
public class TransactionResource extends RepresentationModel {

  @JsonProperty("id")
  private UUID uuid;

  public void setUuid(UUID uuid) {
    // Remove the hateoas ID (self referential link) if exists
    if (this.hasLink(IanaLinkRelations.SELF)) {
      this.getLinks().without(IanaLinkRelations.SELF);
    }

    add(linkTo(methodOn(TransactionController.class).lookup(uuid, null))
        .withSelfRel()
        .expand());

    this.uuid = uuid;
  }
  ......................
}

我还没有测试过,但可能上面的代码可以像这样简化:

@JsonInclude(Include.NON_NULL)
public class TransactionResource extends RepresentationModel {

  @JsonProperty("id")
  private UUID uuid;

  public void setUuid(UUID uuid) {
    // Remove the hateoas ID (self referential link) if exists
    this.getLinks().without(IanaLinkRelations.SELF);

    add(linkTo(methodOn(TransactionController.class).lookup(uuid, null))
        .withSelfRel()
        .expand());

    this.uuid = uuid;
  }
  ......................
}

请注意,主要更改与RepresentationModel and in the Links中提供的方法的使用有关。

如我所说,请注意我尚未测试代码。我主要关心的是 this.getLinks().without(IanaLinkRelations.SELF); return 一个新的 Links 实例,它可能不会 代替 与相关联的现有实例RepresentationModel,因此您可能需要 merge 结果。请考虑到这一点。