如何使用Spring Hateoas和HAL在链接中添加附加属性?

5
我正在使用配置了@EnableHypermediaSupport(type=HAL)的Spring Boot和Spring Hateoas。尽管在基本场景下工作正常,但我想能够向链接添加其他属性。例如,很容易返回将呈现诸如此类链接的链接:
{
   "_links":{
      "self":{
         "href":"http://localhost/"
      },
      "something":[
         {
            "href":"http://some-url.com/something1"
         },
         {
            "href":"http://some-url.com/something2"
         }
      ]
   }

我想要做的是向something rel中的对象添加更多属性。例如:

{
   "_links":{
      "self":{
         "href":"http://localhost/"
      },
      "something":[
         {
            "name":"something1",
            "href":"http://some-url.com/something1"
         },
         {
            "name":"something2",
            "href":"http://some-url.com/something2"
         }
      ]
   }
}

最好的方法是什么(最好使用ControllerLinkBuilder),而不需要创建自己的DTO?我尝试创建自己的Link子类并添加名称字段(以及getter和setter),但它们似乎被忽略了。

1个回答

5

HAL的支持将得到重大升级,建议等待。

我不知道您如何使用子类,但基本上该方法可行。您不能忘记在name字段上添加注释。例如:

public SuperLink extends Link {
  @XmlAttribute
  private String name;

  public SuperLink(Link link, String name) {
    super(link.getHref(), link.getRel());
    this.name = name;
  }

我忘记加上@XmlAttribute注释,即使我像你说的那样将其添加到字段中,该字段也不会被渲染。你使用的Spring Hateoas版本是什么? - Johan
1
一个问题是我不小心在类路径中同时拥有了 faster-jackson 和 jackson 1。当我删除 jackson one 后,我得到了以下错误:Caused by: java.lang.IllegalStateException: Conflicting property name definitions: 'links' (for [field org.springframework.hateoas.ResourceSupport#links]) vs '_links' (for [method org.springframework.hateoas.ResourceSupport#getLinks(0 params)])但如果我升级到 0.9.0.BUILD-SNAPSHOT,一切似乎都能正常工作。 - Johan
@VelNaga,您可以使用resource.addLink(new SuperLink(...))代替resource.add(new Link(...))。如果您需要更多信息,最好提出一个新的问题并描述您的情况。 - a better oliver
@abetteroliver,我已经提出了问题,请在这里找到它:https://stackoverflow.com/questions/52278347/spring-boot-customise-hypermediahateoas-response-and-add-additional-attribute ,你能否在这里回答……对我来说将会非常有帮助。 - VelNaga
@abetteroliver,我尝试了一下,但它没有起作用...你的帮助将是非常非常可贵的。 - VelNaga
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接