我正在使用 Spring Framework 4.1.0 和 Spring HATEOAS 0.16.0 为该应用程序开发 Spring Web 应用程序和 Spring 测试客户端。
测试客户端有如下语句:
ResponseEntity<Resource<Calculation>> response = restTemplate.exchange(
calculationsUri,
HttpMethod.POST,
new HttpEntity<Calculation>(calculation),
new ParameterizedTypeReference<Resource<Calculation>>()
);
...其中Calculation
是带有 Jackson 注释的 POJO(例如,@JsonProperty
)。
如果没有 CURIE,则该RestTemplate.exchange()
调用会成功:response.getBody().getLinks()
返回 的非空非空实例List<Link>
。
我的 Web 应用程序具有非标准链接关系,例如“子计算”。我想使用 CURIE。
使用 CURIE,该RestTemplate.exchange()
调用失败:响应反序列化代码抛出org.springframework.http.converter.HttpMessageNotReadableException
,原因是com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
:'无法读取 JSON:无法识别的字段“名称”(类 org.springframework.hateoas.Link),未标记为可忽略(一个已知属性“href” ])'
_links
特别是,Jackson 无法将响应 JSON 中的映射中的 CURIE(s) 反序列化到List<Link>
-typed field org.springframework.hateoas.ResourceSupport.links
。响应 JSON 如下所示:
{
"_links" : {
"self" : {
"href" : "..."
},
"myNamespace:sub-calculations" : [ {
"href" : "..."
}, {
"href" : "..."
} ],
"curies" : [ {
"href" : ".../{rel}",
"name" : "myNamespace",
"templated" : true
} ]
}
}
我如何使用RestTemplate.exchange()
获取HAL+JSON(“application/hal+json”)表示使用 CURIE 的资源?