当前位置: 首页 > 知识库问答 >
问题:

Spring5 Reactive WebClient似乎不会反序列化参数化类型

连曜灿
2023-03-14

这个问题以前的标题是“Spring5 Reactive WebClient消费HAL+JSON HATEOAS PagedResources”,但新的标题更合适。

下面的代码与RestTemplate完全兼容(参数化类型是从Spring DataREST提供的HateoAs/Hal PagedResource返回的):

// use exchange with ParameterizedTypeReference
ResponseEntity<PagedResources<Foo>> responseEntity = 
    restTemplate.exchange("/foos", HttpMethod.GET, null, 
    new ParameterizedTypeReference<PagedResources<Foo>>() {}, 
    randomServerPort, 0, 100);
// then the actual list of foos can be obtained like so
PagedResources<Foo> resources = responseEntity.getBody();
List<foo> foos = new ArrayList(resources.getContent());
public Mono<PagedResources<Foo>> getFoos() {
        return client.get()
            .uri("/foos").accept(MediaTypes.HAL_JSON)
            .retrieve()
            .bodyToMono(new ParameterizedTypeReference<PagedResources<Foo>>(){});
}

上面调用服务html" target="_blank">方法的控制器代码是:

@GetMapping("/foos")
public Mono<PagedResources<Foo>> getFoos() {
    return dataService.getFoos();
}

使用curl的结果是:

{"links":[],"content":[],"page":null}

经过大量研究后,上面的代码应该可以工作,因为参数化类型应该传递给Jackson,就像上面所示的RestTemplate的情况一样。

错误文件:https://jira.spring.io/browse/spr-16715

共有1个答案

杜禄
2023-03-14

Spring Data REST和Spring HATEOAS目前都不支持此时的反应堆类型。

 类似资料:
  • 我目前正在使用materialize CSS,似乎我已经遇到了选择字段。 我使用的是他们站点提供的示例,但不幸的是,它呈现在视图中。我想知道是否有其他人能帮上忙。 我要做的是创建一个有两个结尾间隔提供填充的行-然后在内部的两个行项中应该有一个搜索文本输入和一个搜索选择下拉列表。 这是我正在使用的示例:http://materializecss.com/forms.html 提前谢谢你。 下面是所讨

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?

  • 我想使用Google Gson库(de)序列化一个具有参数化成员字段的参数化类型。 这将引发

  • 序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并