能否在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
相关产品推荐
相关产品推荐

