禁用JSON中的超文本应用语言(HAL)?
在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
在此示例中传入将按需呈现内联表示形式。
此提交对一般功能的更多信息,这提交已经定义的示例投影。
以上是 禁用JSON中的超文本应用语言(HAL)? 的全部内容, 来源链接: utcz.com/qa/402276.html