Quarkus OIDC服务不可用返回500错误如何自定义返回码及响应内容
解决方案
原因说明
Quarkus OIDC模块的异常默认由框架内置的高优先级处理器处理,普通自定义ExceptionMapper优先级更低不会被触发,同时默认开启的HTTP错误页配置会生成HTML格式的响应内容,就是你收到的500错误页。
操作步骤
- 实现高优先级的
OIDCException专属异常处理器
添加如下Java类,通过@Priority注解设置极高优先级,确保比框架内置处理器先触发:
import io.quarkus.oidc.OIDCException; import javax.annotation.Priority; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @Provider @Priority(1) // 数值越小优先级越高,设置为1可覆盖框架默认处理器 public class CustomOIDCExceptionMapper implements ExceptionMapper<OIDCException> { @Override public Response toResponse(OIDCException e) { // 此处STATUS_CODE替换为你需要的自定义错误码,比如503、400等 return Response.status(STATUS_CODE).build(); } }
- 关闭默认HTML错误页
在项目的application.properties(或application.yml)中添加配置,禁用框架自动生成HTML错误页:
quarkus.http.error-page.enabled=false
- 可选:关闭OIDC连接重试
如果不需要OIDC连接失败后重试,可添加如下配置减少响应耗时:
quarkus.oidc.connection.max-retries=0 quarkus.oidc.connection.delay-between-retries=0
验证
重启服务后模拟OIDC服务不可用的场景,接口将返回你指定的状态码,无任何响应体内容。
内容的提问来源于stack exchange,提问作者user1549094
相关产品推荐
相关产品推荐

