- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 spring-data-rest 将实体公开为(分页)休息资源。一切正常,但是当我通过 RestTemplate
请求数据时,我得到了一个无用的 HATEOAS JSON(我没有要求)。 JSON 似乎是 PagedResources。我可以忍受,但 JSON 没有正确转换为对象。里面没有content
。
存储库:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>
{
List<Person> findByLastName(@Param("name") String name);
}
客户:
public List<Person> getPersons()
{
RestTemplate rt = new RestTemplate();
System.out.println(rt.getForObject(URL, PagedResources.class).getContent().size());
System.out.println(rt.getForObject(URL, PagedResources.class).getLinks().size());
System.out.println(rt.getForObject(URL, PagedResources.class).getMetadata().getTotalElements());
return new ArrayList<Person>(rt.getForObject(URL, PagedResources.class).getContent()); // <-- empty
}
系统输出:
0 // getContent().size()
4 // getLinks().size()
2 // getTotalElements()
curl :
C:\...>curl http://localhost:8080/spring-jsf-rest/rest/people
{
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people{?page,size,sort}",
"templated" : true
},
"search" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/search"
}
},
"_embedded" : {
"people" : [ {
"firstName" : "John",
"lastName" : "Rambo",
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/1"
}
}
}, {
"firstName" : "Chuck",
"lastName" : "Norris",
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/2"
}
}
} ]
},
"page" : {
"size" : 20,
"totalElements" : 2,
"totalPages" : 1,
"number" : 0
}
}
似乎 _embedded
没有正确映射到内容?!
最佳答案
正如您正确发现的那样,PagedResources
没有 _embedded
属性,这就是您没有填充 content
属性的原因.
这个困境可以通过两种不同的方式来解决:
首先提供与表示匹配的类型。因此,制作一个自定义类并坚持使用表示的属性名称或使用 Jackson 注释等对其进行自定义。
设置自定义 MappingJackson2HttpMessageConverter
并自定义 ObjectMapper
以获得 Spring HATEOAS 开箱即用的 Jackson2HalModule
配置。
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(new Jackson2HalModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
converter.setObjectMapper(mapper);
RestTemplate template = new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
关于json - 为什么 RestTemplate 不将响应表示绑定(bind)到 PagedResources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239052/
我定义了@Bean objectMapper并设置日期格式如下: ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new
我正在使用Spring Boot REST示例。在此,我使用 RestTemplate 调用返回 PagedResources> 的端点。目的。但是当调用RestTemplate时,我没有得到任何内容
我正在使用 spring-data-rest 将实体公开为(分页)休息资源。一切正常,但是当我通过 RestTemplate 请求数据时,我得到了一个无用的 HATEOAS JSON(我没有要求)。
我正在尝试在我的 Spring Boot 应用程序的集成测试中使用 TestRestTemplate,向 Spring Data REST 存储库发出请求。 浏览器中的响应具有以下形式: { "lin
当我返回Page时来 self 的 @RestController 中的方法类, Entity 的所有字段均通过 @OneToXXX 引用和@ManyToXXX发生在返回的 JSON 对象中。但是当我
我们目前正在我们最新的项目中实现一个 API 库。我们正在尝试使用带有 HAL 的 Spring HATEOAS 作为适当的库来生成 json hal 响应。 使用 Spring boot 1.2.5
我的 Controller 中有这样的东西: @RequestMapping @ResponseBody public HttpEntity> promotions( @Pageabl
我是一名优秀的程序员,十分优秀!