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

Spring Hateoas 使用RestTemplate消费接口时content始终为空如何解决

问题根因

默认RestTemplate没有集成Spring HATEOAS的HAL格式序列化支持,无法将返回报文中_embedded节点下的内容正确映射到PagedModel的content属性,因此会出现元数据和状态码正常,但集合内容为空的情况。

解决步骤
  • 第一步:消费端引入Spring HATEOAS依赖,Spring Boot项目直接引入对应starter即可:
<!-- Maven 依赖配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
  • 第二步:为RestTemplate注册HATEOAS消息转换器,使用Spring官方提供的配置器自动适配HAL格式,无需手动处理Jackson模块注册逻辑:
@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(HypermediaRestTemplateConfigurer configurer) {
        RestTemplate restTemplate = new RestTemplate();
        // 自动注入HATEOAS支持的消息转换器,适配HAL JSON格式
        configurer.configure(restTemplate);
        return restTemplate;
    }
}
  • 第三步:在Content实体类上添加关系注解,和返回报文中_embedded下的集合键名匹配:
import org.springframework.hateoas.server.core.Relation;

@Relation(collectionRelation = "contents", itemRelation = "content")
public class Content {
    // 原有实体属性和方法保持不变
}
  • 可选手动配置方案:如果需要自定义ObjectMapper,可手动注册HATEOAS的HAL模块:
ObjectMapper halObjectMapper = Jackson2ObjectMapperBuilder.json()
        .modules(new Jackson2HalModule())
        .handlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(
                new DefaultRelProvider(), null, null))
        .build();
// 将配置好的ObjectMapper绑定到消息转换器,加入RestTemplate的转换器列表即可

补充说明:请确保服务提供端和消费端的Spring HATEOAS版本尽量保持一致,避免版本差异导致的序列化规则不兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:05