我使用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>>()
);...wherein Calculation是一个带有杰克逊注释的POJO (例如,@JsonProperty)。
如果没有CURIEs,RestTemplate.exchange()调用就会成功:response.getBody().getLinks()将返回List<Link>的一个非空非空实例。
我的web应用程序具有非标准的链接关系,例如,“子计算”。我想用居里饼。
使用CURIEs,RestTemplate.exchange()调用失败:响应反序列化代码抛出org.springframework.http.converter.HttpMessageNotReadableException,这是由com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException引起的:‘无法读取JSON:无法识别的字段"name“(类org.springframework.hateoas.Link),未标记为可忽略(一个已知属性"href"])’
特别是,Jackson未能从响应JSON中的_links映射反序列化居里值到List<Link>-typed字段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")表示使用CURIEs的资源?
发布于 2014-11-07 02:19:26
看起来这个库根本不支持HAL链接对象https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-06#section-5.5的name字段……实际上与居里的没有任何关系。你应该向该库提出一个问题,以支持HAL链接对象的所有字段。
就CURIE @CCCV而言,在您的示例中,它们的关键是AWALYS myNamespace:子计算,无论CURIE是否存在。CURIE只允许您取消对应该链接到文档的URL的引用。这有点奇怪,我看到实现总是把它搞错,认为URI才是最重要的。看,https://groups.google.com/d/msg/hal-discuss/lt0CnC3eev4/YinN1Us54KcJ,我不是说我同意it..but,这就是它应该的样子
https://stackoverflow.com/questions/26659812
复制相似问题