0

我正在使用 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 的资源?

4

1 回答 1

0

看起来图书馆根本不支持 HAL 链接对象的名称字段https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-06#section-5.5 ...确实不是和 CURIE 有什么关系。您应该打开该库的问题以支持 HAL 链接对象的所有字段。

就您的示例中的 CURIE @CCCV 而言,无论 CURIE 是否存在,它们的关键是 AWALYS myNamespace:sub-calculations。CURIE 只是让您取消对应该链接到文档的 URL 的引用。这有点奇怪,我看到实现一直认为 URI 很重要。见https://groups.google.com/d/msg/hal-discuss/lt0CnC3eev4/YinN1Us54KcJ 我不是说我同意它..但这就是它应该的样子

于 2014-11-06T18:19:25.897 回答