我正在使用Spring Boot和HATEOAS構建REST API,並且當我的API返回一個集合時,它被封裝在一個「_embedded」屬性中,如下所示:如何在Spring中刪除「_embedded」屬性HATEOAS
{
"_links":{
"self":{
"href":"http://localhost:8080/technologies"
}
},
"_embedded":{
"technologies":[
{
"id":1,
"description":"A",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/1"
}
}
},
{
"id":2,
"description":"B",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/2"
}
}
}
]
}
}
我想要的迴應是這樣的:
{
"_links":{
"self":{
"href":"http://localhost:8080/technologies"
}
},
"technologies":[
{
"id":1,
"description":"A",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/1"
}
}
},
{
"id":2,
"description":"B",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/2"
}
}
}
]
}
我TechnologiesController:
@RestController
@ExposesResourceFor(Technology.class)
@RequestMapping(value = "/technologies")
public class TechnologiesController {
...
@ResquestMapping(method = RequestMethod.GET, produces = "application/vnd.xpto-technologies.text+json")
public Resources<Resource<Technology>> getAllTechnologies() {
List<Technology> technologies = technologyGateway.getAllTechnologies();
Resources<<Resource<Technology>> resources = new Resources<Resource<Technology>>(technologyResourceAssembler.toResources(technologies));
resources.add(linkTo(methodOn(TechnologiesController.class).getAllTechnologies()).withSelfRel());
return resources;
}
配置類具有註釋@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)。
沒有「_embedded」的情況下產生響應的最佳方式是什麼?
如果您從響應中刪除_embedded,那麼響應將不再是有效的HAL。您或者需要堅持'_embedded'或使用不同的媒體類型。 – 2015-03-02 12:24:39
HAL草案說「保留」_embedded「屬性是可選的」 – 2015-03-02 14:56:06
它是可選的,因爲資源不必具有任何嵌入資源。但是,如果是這樣,那麼它們應該在'_embedded'下面。 – 2015-03-02 15:02:53