当前位置: 首页 > 知识库问答 >
问题:

为什么Spring Data REST包含"重复"链接?

明正德
2023-03-14

您好,我使用的是SpringDataREST,当我使用PagingAndSortingRepository时,我遇到了一个奇怪的问题。我得到的响应像预期的那样有一个_selflink,但在下面的响应中,它还提供了一个与evindent相同的实体hf:foo的重复链接。

重复链接“自我”:{“href”:“http://localhost:8080/foos/8445”}和“hf: foo”:{“href”:“http://localhost:8080/foos/8445”

  curl http://localhost:8080/foos?page=0&size=1

        {
      "_links" : {
    "first" : {
      "href" : "http://localhost:8080/foos?page=0&size=1"
    },
    "prev" : {
      "href" : "http://localhost:8080/foos?page=0&size=1"
    },
    "self" : {
      "href" : "http://localhost:8080/foos"
    },
    "next" : {
      "href" : "http://localhost:8080/foos?page=2&size=1"
    },
    "last" : {
      "href" : "http://localhost:8080/foos?page=81&size=1"
    }
  },
  "_embedded" : {
    "hf:foos" : [ {
      "name" : "comsi",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/foos/8445"
        },
        "hf:foo" : {
          "href" : "http://localhost:8080/foos/8445"
        } ]
      }
    } ]
  },
  "page" : {
    "size" : 1,
    "totalElements" : 82,
    "totalPages" : 82,
    "number" : 1
  }
}

请帮忙。这是居里命名空间的问题吗。

共有3个答案

萧丁雨
2023-03-14

在代码的乞求中使用. RemveLink()来刷新所有以前的链接

郎华皓
2023-03-14

如果要删除“重复”链接,可以添加此Bean:

@Bean
public ResourceProcessor<Resource<?>> entityProcessor() {
  return new ResourceProcessor<Resource<?>>() {
    @Override
    public Resource<?> process(Resource<?> resource) {
      resource.removeLinks();
      return resource;
    }
  };
}
壤驷喜
2023-03-14

你在这里看到的不是你声称的重复链接。一个是self链接,它的定义需要规范化(即没有模板参数)。

另一个附加链接公开了资源类型(在本例中是foo的项目资源)。这允许客户端在跟踪链接时推理他们期望什么(什么表示,使用什么HTTP动词)。

此外,该特定链接将公开可能应用于该资源的模板变量。例如,如果投影可用于Foo实例,则嵌入文档的链接将如下所示。

 { 
   _links : {
      self : { href : "…/foos/8445"},
      ht:foo : { href : "…/foos/8445{?projection}" }
   }
 }

现在你可以说,如果附加链接与self链接相同,那么它就不需要存在。这将要求客户机更加复杂,因为它基本上需要使用“如果有,那么使用,如果没有,那么做一些不同的事情”来保护访问。这就是为什么我们决定始终呈现它,只是为了确保查找基于资源类型的链接的客户端无论如何都能找到它们。

 类似资料:
  • 嗨,我使用的是spring data rest,而我有一个奇怪的问题,当我使用PagingAndSortingRepository时,我得到的响应像预期的那样有一个_self链接,但它也给出了一个相同实体hf:foo的重复链接,就像下面的响应中的evindent一样。 dupicate链接“self”:{“href”:“http://localhost:8080/foos/8445”}和“hf:f

  • 我试图打印包含,但是,HashSet没有检测到整数[]值。这和它被引用有关系吗?如果我不想将实际的整数[]对象传递给方法的参数,我如何克服这个问题?

  • 我正在开发一个电子邮件验证和密码重置使用电子邮件通过Firebase。所有的功能都运行得很好。不过,我有一个担心。

  • 我觉得这是很基本的东西,但是我找不到正确的信息。我包括一个javascript文件在我的html: 在客户机数据库中。js我正在尝试包含一个类: 在phoenix.js我有这样的课: 但是,在浏览器控制台中,我得到错误: 显然,解决这个问题的正确方法是转换client_db。js是一个模块,但如何最好地实现这一点还不清楚。

  • 问题内容: 为什么返回 Javascript? 在文档页面上,我看到以下内容: ## 针对NaN的测试 相等运算符(和)不能用于测试的值。使用代替。 有没有参考资料可以回答这个问题?不客气。 问题答案: 严格的回答 :因为JS规范是这样说的: 如果Type(x)是Number,则 如果x为NaN,则返回false。 如果y为NaN,则返回false。 有用的答案 :浮点数的IEEE 754规范(所

  • 我见过类似的问题,但他们仍然没有意义,我的猿类大脑。 这里有一个例子。如果我在名为的头文件中声明了一个函数:并且在文件中声明了一个函数:。我在另一个文件(例如)中看到过这样的人,它只包含头,它只有声明(里面没有代码),而不包含带有代码的。但令我震惊的是,当他们调用中的函数时,它使用了中的代码并打印“hello”。怎么做?当我只包含了文件时,它如何打印在文件中添加的“hello”,而它只是一个声明,