当前位置: 首页 > 面试题库 >

禁用JSON中的超文本应用语言(HAL)?

龚俊捷
2023-03-14
问题内容

在2.0.2.RELEASE中将Spring Data REST与JPA结合使用。

如何禁用JSON中的超文本应用语言(HAL)?http://stateless.co/hal_specification.html

我已经尝试了很多东西,但无济于事。例如,我已经将Accept和Content-type标头设置为“ application / json”而不是“
application / hal + json”,但是我仍然收到带有超链接的JSON内容。

例如,我想得到类似的东西:

{
"name" : "Foo",
"street" : "street Bar",
"streetNumber" : 2,
"streetLetter" : "b",
"postCode" : "D-1253",
"town" : "Munchen",
"country" : "Germany",
"phone" : "+34 4410122000",
"vat" : "000000001",
"employees" : 225,
"sector" : {
     "description" : "Marketing",
     "average profit": 545656665,
     "average employees": 75,
     "average profit per employee": 4556
     }
}

代替:

{
"name" : "Foo",
"street" : "street Bar",
"streetNumber" : 2,
"streetLetter" : "b",
"postCode" : "D-1253",
"town" : "Munchen",
"country" : "Germany",
"phone" : "+34 4410122000",
"vat" : "000000001",
"employees" : 225,
"_links" : {
     "self" : {
          "href" : "http://localhost:8080/app/companies/1"
     },
     "sector" : {
          "href" : "http://localhost:8080/app/companies/1/sector"
     }
}
}

谢谢你的帮助。


问题答案:

Spring Data REST的默认设置使用HAL作为默认的超媒体表示格式,因此服务器将为给定的Accept标头返回以下内容:

  • 没有标题-> application/hal+json-> HAL
  • application/hal+json-> application/hal+json->哈尔
  • application/json-> application/json-> HAL(这是默认配置)
  • application/x-spring-data-verbose+json-> application/x-spring-data-verbose+json->一种特定于Spring Data的格式(links用于链接容器,并content用作收集项的包装。

如果您配置RepositoryRestConfiguration.setDefaultMediaType(…)为非HAL格式,则除非您明确要求,否则服务器将返回特定于Spring
Data的JSON格式application/hal+json。诚然,配置选项可能有点误导,所以我提交了DATAREST-294进行了改进。该问题已在2014年的RC1(Dijkstra)中得到解决。

请注意,我们有效地需要一种超媒体格式,以便能够表达受管资源之间的关系并实现服务器的可发现性。因此,您不可能完全摆脱它。这主要是由于以下事实:如果暴露具有双向关系的实体或组成巨大的对象图,则很容易使服务器崩溃。

内联相关实体

如果您永远不希望链接到扇区并始终内联它们,则一个选择是首先简单地将扇区排除SectorRepository为导出为REST资源。您可以通过使用注释存储库接口来实现此目的@RepositoryRestResource(exported = false)

要获得在下例中发布的表示形式,请查看Spring Data REST 2.1
M1中引入的投影功能。基本上,它允许您通过简单的界面在资源上创建与默认视图不同的可选视图。

您基本上可以定义一个接口:

@Projection(name = "foo", types = YourDomainClass.class)
interface Inlined {

  // list all other properties

  Sector getSector();
}

如果将此接口放入域类的(子)程序包中,或通过RepositoryRestConfiguration.projectionConfiguration()资源公开手动注册,则暴露的资源YourDomainClass将接受request参数,projection以便foo在此示例中传入将按需呈现内联表示形式。

此提交对一般功能的更多信息,这提交已经定义的示例投影。



 类似资料:
  • 我使用Spring MVC 开发了一个 REST Web 应用程序,我可以将 JSON 对象发送到客户端。 我想构造一个连接到我的 Web 应用程序的脚本/AJAX 客户端,但我不知道如何发送第一个 HTML 页面(使用 JSP)。我知道我应该为JSP页面提供一些嵌入式AJAX。此 AJAX 将向我的 Web 服务发送请求。 更新:我无法实现的要求是在浏览器中编写默认URI(),并查看我在JSP页

  • 我是新来的。我想解析html,但问题是我们必须在中指定的URL,我将在运行时从其他页面响应此URL。有没有办法将收到的网址传递到中?我读过这样的东西: 但是我不知道如何使用它。我很想知道是否有其他方法比jsoup更好。

  • 我正在尝试使用放心来检查服务器返回的HTML文档的一些属性。演示该问题的SSCCE如下所示: 现在,此尝试以,这是由所有可能的错误大约 30 秒左右后超时! 如果我用< code>xmlPathConfig()删除这一行。用()。功能(...)当特性“http://Apache . org/XML/features/disallow-DOCTYPE-decl”设置为true时,由于< code>D

  • 对于上面的html内容,我如何使用Jsoup解析并获取文本 当我使用 我得到了这样的东西

  • 我有一些信息要在对话框中显示。它像标题,然后在它下面的文本;标题,然后在它下面的文本。像wise一样,有4个标题和4个描述要显示。它应该是这样的 描述描述描述描述描述描述描述描述描述描述描述描述描述描述描述 描述描述描述描述描述描述描述描述描述描述描述描述描述描述描述 如您所见,有粗体文本、下划线文本、换行符等。我想将这种文本添加到警报框中,所以下面是我尝试的。 然而,这个技巧没有奏效。发生的是,

  • 我正在尝试使用BeautifulSoup转换HTML文本块。以下是一个示例: 我试着做了这样的事情: ...但是这样我的span元素总是在新行上。这当然是一个简单的例子。有没有办法在超文本标记语言页面中获取文本,就像它在浏览器中呈现的方式一样(不需要css规则,只是div、spans、li等元素呈现的常规方式)在Python中?