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

引入Swagger后ResourceSupport返回JSON的links字段变为_links问题

问题原因分析

这是因为Springfox Swagger 2.4.0默认启用了HAL(Hypertext Application Language)序列化规范,而HAL标准中规定链接字段的名称就是_links;在没有引入Springfox时,Spring Hateoas使用自身默认的序列化逻辑,输出的链接字段是links。

当你添加Springfox依赖并启用Swagger后,它会自动配置HAL对应的消息转换器(MappingJackson2HttpMessageConverter的HAL变体),这个转换器会覆盖Spring Hateoas原本的序列化行为,导致字段名从links变成_links。

解决办法(保持links字段不变)

下面提供几种可行的方案,你可以根据自己的场景选择:

1. 全局禁用Springfox的HAL序列化支持

通过自定义配置类,优先使用Spring Hateoas默认的消息转换器,或者直接排除Springfox的HAL自动配置:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
                // 添加Spring Hateoas默认的Jackson转换器到最前面,优先使用
                converters.add(0, new MappingJackson2HttpMessageConverter());
            }
        };
    }
}

2. 用Jackson Mixin强制指定字段名

如果不想全局修改序列化规则,可以通过Jackson的Mixin机制,给ResourceSupport类指定links字段的名称:
首先创建Mixin类:

abstract class ResourceSupportMixin {
    @JsonProperty("links")
    abstract List<Link> getLinks();
}

然后在配置类中注册这个Mixin:

@Configuration
public class JacksonConfig {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
        return builder -> builder.mixIn(ResourceSupport.class, ResourceSupportMixin.class);
    }
}

这样所有继承ResourceSupport的类都会输出links字段,不受HAL序列化的影响。

3. 升级Springfox版本

Springfox的后续版本(比如2.9.x及以上)对Spring Hateoas的兼容性更好,部分版本提供了配置开关来控制是否启用HAL序列化。你可以尝试升级Springfox依赖到较新的稳定版本,然后通过配置关闭HAL支持:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                // 其他配置...
                .useDefaultResponseMessages(false)
                .directModelSubstitute(ResourceSupport.class, Object.class);
    }
}

内容的提问来源于stack exchange,提问作者Héctor Valls

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:08:10