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

能否在Spring Data REST中使用自定义媒体类型(如JSON:API)?

借助Spring Data REST使用自定义媒体类型(以JSON:API为例)

可以实现,无需手动编写控制器,仅通过配置就能让Spring Data REST支持自定义媒体类型(比如JSON:API的application/vnd.api+json),具体步骤如下:

1. 引入依赖

添加Spring HATEOAS的JSON:API模块依赖(以Maven为例):

<dependency>
    <groupId>org.springframework.hateoas</groupId>
    <artifactId>spring-hateoas-jsonapi</artifactId>
</dependency>

如果使用Spring Boot,无需手动指定版本,父依赖会自动管理适配版本。

2. 配置自定义媒体类型支持

创建配置类,实现RepositoryRestConfigurer接口,注册JSON:API消息转换器并配置媒体类型映射:

import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.hateoas.mediatype.jsonapi.JsonApiMediaTypeConfiguration;
import org.springframework.http.converter.HttpMessageConverter;

import java.util.List;

@Configuration
public class RestConfig implements RepositoryRestConfigurer {

    @Override
    public void configureHttpMessageConverters(List<HttpMessageConverter<?>> converters) {
        RepositoryRestConfigurer.super.configureHttpMessageConverters(converters);
        // 注册JSON:API消息转换器
        converters.add(JsonApiMediaTypeConfiguration.createJsonApiMessageConverter());
    }

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        // 建立媒体类型别名映射,简化请求时的参数写法
        config.getMediaTypeMappings().put("jsonapi", org.springframework.hateoas.MediaTypes.JSON_API);
    }
}

3. 验证使用

  • 获取数据:发送请求时设置请求头Accept: application/vnd.api+json,Spring Data REST会返回符合JSON:API规范的响应体。
  • 提交数据:发送POST/PUT请求时设置Content-Type: application/vnd.api+json,请求体采用JSON:API格式,系统可正确解析并处理。

补充说明

尽管官方文档标注仅支持application/hal+json和application/json,但Spring Data REST基于Spring HATEOAS构建,而Spring HATEOAS本身支持扩展自定义媒体类型。通过上述配置,既能保留Spring Data REST自动暴露CRUD仓库的便利性,又能实现自定义媒体类型的支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:19