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

