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

Spring Boot 2.7+SpringDoc:如何从Swagger UI排除@AuthenticatedUser参数?

解决SpringDoc OpenAPI UI展示自动注入参数的问题

针对Spring Boot 2.7 + SpringDoc OpenAPI UI 1.8.0中,带有@AuthenticatedUser注解的自动注入参数被标记为必填并显示在Swagger UI的问题,提供以下几种解决方案:

1. 全局配置:自定义ParameterCustomizer忽略指定注解的参数

通过实现SpringDoc的ParameterCustomizer接口,全局识别带有@AuthenticatedUser注解的参数,将其标记为隐藏,无需修改现有控制器代码。

示例Kotlin代码:

import io.swagger.v3.oas.models.parameters.Parameter
import org.springdoc.core.customizers.ParameterCustomizer
import org.springframework.core.MethodParameter
import org.springframework.stereotype.Component

@Component
class AuthenticatedUserParamFilter : ParameterCustomizer {

    override fun customize(parameter: Parameter, methodParameter: MethodParameter): Parameter {
        // 检查参数是否带有@AuthenticatedUser注解
        if (methodParameter.hasParameterAnnotation(AuthenticatedUser::class.java)) {
            // 标记为隐藏,Swagger UI将不再展示该参数
            parameter.hidden = true
            // 若需彻底移除参数,可直接返回null(需确认SpringDoc版本兼容性)
            // return null
        }
        return parameter
    }
}

启动服务后,所有带@AuthenticatedUser的参数会自动从Swagger UI中隐藏。

2. 单个端点处理:手动标记参数为隐藏

如果仅需处理个别端点,可在参数上添加@Parameter(hidden = true)注解,直接隐藏该参数:

@GetMapping("/cameras")
@Secured("ROLE_GUEST")
fun readAll(
    @AuthenticatedUser 
    @Parameter(hidden = true) 
    userDetails: WebcamUserDetails
): List<CameraDto> {
    // 业务逻辑代码
}

3. 全局排除特定参数类型(仅适用于该类型全为自动注入的场景)

如果WebcamUserDetails类型仅用于自动注入,从未作为用户传入参数使用,可通过配置文件全局排除该类型:

在application.properties中添加:

# 排除指定类型的参数
springdoc.api-docs.parameters-to-exclude=com.yourpackage.WebcamUserDetails

或application.yml:

springdoc:
  api-docs:
    parameters-to-exclude: com.yourpackage.WebcamUserDetails

注意:此方法会排除所有该类型的参数,若该类型有其他场景需要展示则不适用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:48:27