![](/img/trans.png)
[英]clamav-rest Spring 3.2 RestTemplate results in 400 Bad Request
[英]Marshalling Spring Data REST Query Results with RestTemplate
使用RestTemplate.exchange
调用查询端点时,我应该期望哪种返回类型?
我的存储库有一个方法可以这样:
Page<Account> findAccountByFirstName(String name, Pageable pageable);
在集成测试中,我使用RestTemplate
进行以下调用:
ResponseEntity<List<Account>> accountResponse = restPleb.exchange(
new RequestEntity<Void>(HttpMethod.GET, getUri("/accounts/search/findByFirstName?firstName=Kevin")),
new ParameterizedTypeReference<List<Account>>() {}
);
响应在名为accounts
的对象中具有找到的资源的列表:
{
"_embedded" : {
"accounts" : [ {
"lastName" : "Lastname",
"firstName" : "Kevin",
"phoneNumber " : "+44 7700000000",
"email" : "kevin@example.com",
"_links" : {
"self" : {
"href" : "http://localhost:53826/accounts/id"
},
"persistableAccount" : {
"href" : "http://localhost:53826/accounts/id"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:53826/accounts/search/findByFirstName?firstName=Kevin"
}
},
"page" : {
"size" : 20,
"totalElements" : 1,
"totalPages" : 1,
"number" : 0
}
}
我收到以下错误,它们之间的RestTemplate
和Jackson无法弄清楚该如何处理响应。 大概是因为它期望一个数组而不是一个对象。
org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
有没有办法让RestTemplate
给Jackson正确的提示以正确地反序列化呢? 我本以为一定有办法,因为鸿沟在两边!
更新资料
我尝试将响应类型指定为Resources<Account>
,这可以防止引发异常,而是提供一个空列表: Resources { content: [], links: [] }
按照格式 ,我想它必须以不同的方式解析。 可以使用此示例进行解析- 此处定义
将转换器注册到模板->并使用资源来解析响应。
public RestTemplate getRestTemplateWithHalMessageConverter() {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> existingConverters = restTemplate.getMessageConverters();
List<HttpMessageConverter<?>> newConverters = new ArrayList<>();
newConverters.add(getHalMessageConverter());
newConverters.addAll(existingConverters);
restTemplate.setMessageConverters(newConverters);
return restTemplate;
}
private HttpMessageConverter getHalMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jackson2HalModule());
MappingJackson2HttpMessageConverter halConverter = new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class);
halConverter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
halConverter.setObjectMapper(objectMapper);
return halConverter;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.