如何在spring-data-rest中使用没有HAL响应结构的空集合

时间:2016-11-17 07:16:02

标签: spring-mvc spring-data-rest spring-4 spring-hateoas

我在我的应用程序中使用spring-data-rest。我使用configureRepositoryRestConfiguration

配置了repositoryRest

我在此配置中添加了以下两行

config.exposeIdsFor(Person.class);
config.setDefaultMediaType(MediaType.APPLICATION_JSON_UTF8);
config.useHalAsDefaultJsonMediaType(false);

在添加此配置之前,我的响应如下所示

{
  "_embedded": {
    "persons": []
  },
  "_links": {
    "self": {
      "href": "http://192.168.2.42:8082/persons/search/findByGroupId?groupId=44"
    }
  }
}

我可以按预期使用RestTemplate获取空人列表。但在添加上述配置后,我得到以下响应结构

{
  "links": [{
    "rel": "self",
    "href": "http://localhost:8082/persons/search/findByGroupId?groupId=44"
  }],
  "content": [{
    "collectionValue": true,
    "relTargetType": "com.myapp.example.domain.Person",
    "value": []
  }]
}

使用此回复RestTemplate会返回一个大小为1的列表,其中包含我所在域中所有属性的null值。

任何人都可以帮助获得具有此结构的空列表。

我使用以下代码从API获取响应:

restTemplate.exchange(
    url, 
    GET, 
    HttpEntity.EMPTY, 
    parameterizedTypeReference<Resources<Person>>, 
    Collections.emptyMap()
);

更新

这是一个spring-data-rest bug。因为代码中的某处,而不是PersonEmbeddedWrapper被用作域类型。在调查代码后,我发现JSON响应中的"collectionValue""relTargetType""value"是从EmbeddedWrapper类反序列化的。

参考:EmbeddedWrappers.java

0 个答案:

没有答案