반응형
RestTemplate가 응답 표현을 PagedResources에 바인드하지 않는 이유는 무엇입니까?
spring-data-rest를 사용하여 엔티티를 (페이징된) rest 리소스로 노출하고 있습니다.모든 것이 정상 작동하지만, 제가 데이터를 요청했을 때RestTemplate
쓸모없는 하테오아스 JSON(요청하지 않은 것)을 얻습니다.JSON은 Paged Resources인 것 같습니다.그건 감수하고 살 수 있는데 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
}
System.out:
0 // getContent().size()
4 // getLinks().size()
2 // getTotalElements()
컬:
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
속성이 입력되었습니다.
이 딜레마는 다음 두 가지 방법으로 해결할 수 있습니다.
애초에 표현과 일치하는 유형을 제공합니다.따라서 사용자 정의 클래스를 만들고 표현의 속성 이름을 고수하거나 잭슨 주석 등을 사용하여 사용자 정의하십시오.
커스텀 설정
MappingJackson2HttpMessageConverter
커스터마이즈하여ObjectMapper
을 손에 넣다Jackson2HalModule
Spring 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));
언급URL : https://stackoverflow.com/questions/23239052/why-does-resttemplate-not-bind-response-representation-to-pagedresources
반응형
'programing' 카테고리의 다른 글
null과 undefined를 모두 확인할 수 있는 방법이 있을까요? (0) | 2023.02.22 |
---|---|
WordPress 로딩 jQuery 및 jQuery-migrate를 중지하려면 어떻게 해야 합니까? (0) | 2023.02.22 |
html을 반응과 함께 포함하기 위해 jsx의 3진 연산자 (0) | 2023.02.22 |
ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2023.02.22 |
모든 밑줄을 공백으로 바꾸기 위한 각도 필터 (0) | 2023.02.22 |