【问题标题】:How to add additional attributes to links using Spring Hateoas and HAL?如何使用 Spring Hateoas 和 HAL 向链接添加附加属性?
【发布时间】:2014-01-15 17:03:37
【问题描述】:

我正在使用配置了 @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"
         }
      ]
   }
}

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

【问题讨论】:

    标签: json spring-mvc spring-hateoas hal-json


    【解决方案1】:

    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?
    • 一个问题是我不小心在类路径中同时拥有了 fast-jackson 和 jackson 1。当我删除杰克逊一号时,我收到以下错误:原因:java.lang.IllegalStateException:冲突的属性名称定义:'links'(对于 [field org.springframework.hateoas.ResourceSupport#links])与'_links'(对于 [方法 org.springframework.hateoas.ResourceSupport#getLinks(0 params)]) 但如果我升级到 0.9.0.BUILD-SNAPSHOT 一切似乎都正常。
    • @abetteroliver 如何做到这一点?我们有任何可行的例子吗?我面临着类似的问题......我已经创建了“SuperLink”,但不知道在哪里添加。您的帮助应该是可观的。
    • @VelNaga 而不是 resource.add(new Link(...)) 您使用 resource.addLink(new SuperLink(...))。如果您需要更多信息,最好提出一个新问题并描述您的情况。
    • @abetteroliver 我已经提出了这个问题请在这里找到它stackoverflow.com/questions/52278347/… 你能在这里回答吗...这对我真的很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多