You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestRestTemplate调用HATEOAS API返回空Body,curl可正常获取数据

TestRestTemplate接收Spring Data REST分页数据content为空的解决方案

你遇到的问题是因为Spring Data REST返回的HAL格式分页响应中,资源列表嵌套在_embedded字段下,而直接用PagedModel<Hospital>无法正确映射这个嵌套结构,导致content为空(分页元数据在顶层,所以能正常解析)。

解决方法是使用PagedModel<EntityModel<Hospital>>作为返回类型,具体说明如下:

  • 正确接收类型:PagedModel<EntityModel<Hospital>>,其中EntityModel是Spring HATEOAS提供的包装类,专门处理带链接的HAL单个资源,PagedModel结合它就能正确解析_embedded下的资源列表。
  • 请求示例代码:
    // 发起请求,必须用ParameterizedTypeReference指定泛型类型
    ResponseEntity<PagedModel<EntityModel<Hospital>>> response = testRestTemplate.exchange(
            "http://localhost:8083/hospitals?page=0&size=20",
            HttpMethod.GET,
            null,
            new ParameterizedTypeReference<PagedModel<EntityModel<Hospital>>>() {}
    );
    
    // 提取实际的Hospital列表
    PagedModel<EntityModel<Hospital>> pagedResult = response.getBody();
    List<Hospital> hospitalList = pagedResult.getContent().stream()
            .map(EntityModel::getContent) // 从EntityModel中取出Hospital对象
            .collect(Collectors.toList());
    
  • 关键注意点:不能直接传递PagedModel.class给exchange方法,必须用ParameterizedTypeReference保留泛型信息,否则Jackson无法正确反序列化嵌套的资源结构。

单个对象请求正常是因为单个资源的HAL响应没有_embedded嵌套,直接是EntityModel<Hospital>的结构,所以可以直接映射到EntityModel<Hospital>或者Hospital本身。

内容的提问来源于stack exchange,提问作者Dandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:50:55