为什么RestTemplate不将响应表示绑定到PagedResources?

我正在使用spring-data-rest将实体公开为(分页的)rest资源。一切正常,但是当我通过请求数据时RestTemplate,我得到了一个无用的HATEOAS JSON(我没有要求)。JSON似乎是PagedResources。我可以接受,但是JSON无法正确转换为对象。没有content里面。

Repository:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")

public interface PersonRepository extends PagingAndSortingRepository<Person, Long>

{

List<Person> findByLastName(@Param("name") String name);

}

Client:

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

}

System.out:

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填充该属性的原因。

这个难题可以通过两种不同的方式解决:

  1. 首先提供与表示形式匹配的类型。因此,可以制作一个自定义类,并坚持表示的属性名称,或者使用Jackson批注等对它进行自定义。

  2. 设置一个自定义MappingJackson2HttpMessageConverter并自定义,ObjectMapper以获取Jackson2HalModuleSpring HATEOAS出厂时已配置的配置。

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));

以上是 为什么RestTemplate不将响应表示绑定到PagedResources? 的全部内容, 来源链接: utcz.com/qa/411000.html

回到顶部