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

如何使Swagger展示JsonNode属性的@Schema注解描述?

解决Swagger中JsonNode属性@Schema描述不显示的问题

方案1:补充@Schema的类型指定

JsonNode属于动态结构,Swagger默认对其注解解析支持有限,可通过显式指定type和implementation属性,让Swagger正确识别字段的描述信息:

import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.v3.oas.annotations.media.Schema;

public class UserRequest {
     @Schema(name = "name", description = "Username", example = "Rafael")
     private String name;

     @Schema(
         name = "params", 
         description = "Parameters XPTO",
         type = "object",
         implementation = JsonNode.class
     )
     private JsonNode params;
}

方案2:API方法层面显式定义请求体结构

在Controller的API方法中,通过@Content配合@RequestBody,强制Swagger解析请求体类的完整注解信息:

@PostMapping("/users")
@Operation(summary = "创建用户")
@ApiResponses(value = {
    @ApiResponse(responseCode = "200", description = "成功创建用户")
})
public ResponseEntity<UserResponse> createUser(
    @RequestBody 
    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
             schema = @Schema(implementation = UserRequest.class))
    UserRequest request
) {
    // 业务逻辑实现
}

方案3:自定义JsonNode模型转换器

如果上述方案无效,可以编写自定义的ModelConverter,让Swagger对JsonNode类型做特殊处理,确保读取@Schema的描述:

import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.v3.core.converter.ModelConverter;
import io.swagger.v3.core.converter.ModelConverterContext;
import io.swagger.v3.core.converter.ModelConverterImpl;
import io.swagger.v3.oas.models.media.Schema;
import org.springframework.stereotype.Component;

import java.lang.reflect.Type;
import java.util.Iterator;

@Component
public class JsonNodeModelConverter extends ModelConverterImpl {
    @Override
    public Schema resolve(Type type, ModelConverterContext context, Iterator<ModelConverter> chain) {
        if (type instanceof Class && JsonNode.class.isAssignableFrom((Class<?>) type)) {
            Schema schema = super.resolve(type, context, chain);
            // 可通过反射读取字段上的@Schema注解,将描述等信息设置到schema中
            return schema;
        }
        return chain.hasNext() ? chain.next().resolve(type, context, chain) : null;
    }
}

确保该转换器被Spring容器扫描到,或者手动注册到Swagger配置类中。

方案4:升级Swagger依赖版本

部分旧版本的Swagger(如springdoc-openapi v1.x系列)存在JsonNode注解解析的bug,升级到最新稳定版(如v2.x+)可直接解决问题。

Maven依赖示例:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>

Gradle依赖示例:

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:27:15