0

0

自定义 SmallRye GraphQL 错误消息 (Quarkus)

DDD

DDD

发布时间:2025-09-28 16:51:24

|

285人浏览过

|

来源于php中文网

原创

自定义 smallrye graphql 错误消息 (quarkus)

本文介绍了如何在 Quarkus 中使用 SmallRye GraphQL 来自定义错误消息。默认情况下,RuntimeException 的消息可能不会直接显示在 GraphQL 响应中。通过配置 Quarkus 属性,您可以启用 RuntimeException 消息的显示,并指定要包含在错误扩展中的字段,从而实现更精细的错误处理和更友好的用户体验。

启用 RuntimeException 消息显示

默认情况下,SmallRye GraphQL 可能不会直接显示 RuntimeException 的消息。为了使自定义异常中的 getMessage() 方法生效,需要在 application.properties 文件中进行配置。

添加以下配置项,以启用 RuntimeException 消息的显示:

quarkus.smallrye-graphql.show-runtime-exception-message=true

这个配置会告诉 SmallRye GraphQL 显示 RuntimeException 及其子类的消息内容。

配置错误扩展字段

除了显示消息之外,您还可以配置要包含在错误扩展中的字段。这允许您在 GraphQL 响应中提供更详细的错误信息。

例如,如果您想将 SomeException 中的 someErrors 列表包含在错误扩展中,可以在 application.properties 中添加以下配置:

quarkus.smallrye-graphql.error-extension-fields=someErrors

这个配置告诉 SmallRye GraphQL 将 SomeException 类中名为 someErrors 的字段添加到错误响应的 extensions 部分。请注意,这里假设你的Exception类中存在一个名为someErrors的public字段或者存在对应的getter方法getSomeErrors()。

HIX.AI
HIX.AI

HIX.AI是一个多功能的一体化AI写作助手,集成了120多种AI写作工具,支持50多种语言,能够满足各种写作需求。

下载

示例代码

下面是一个完整的示例,展示了如何自定义异常以及如何在 Quarkus 中配置 SmallRye GraphQL 来显示自定义错误消息和扩展字段。

首先,定义一个自定义异常类:

import graphql.ErrorClassification;
import graphql.GraphQLError;
import graphql.language.SourceLocation;

import java.util.Collections;
import java.util.List;
import java.util.Map;

public class SomeException extends RuntimeException implements GraphQLError {

    private List someErrors;
    private String errorMessage;

    public SomeException(String message, List someErrors) {
        this.errorMessage = message;
        this.someErrors = someErrors;
    }

    @Override
    public String getMessage() {
        return this.errorMessage;
    }

    @Override
    public ErrorClassification getErrorType() {
        return null;
    }

    @Override
    public Map getExtensions() {
        return Collections.singletonMap("someErrors", someErrors);
    }

    @Override
    public List getLocations() {
        return null;
    }
}

然后,在 GraphQL resolver 中抛出这个异常:

import jakarta.inject.Inject;
import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;

import java.util.Arrays;
import java.util.List;

@GraphQLApi
public class MyGraphQLApi {

    @Query
    public String something() {
        List errors = Arrays.asList("Error 1", "Error 2");
        throw new SomeException("Custom error message", errors);
    }
}

最后,在 application.properties 中添加以下配置:

quarkus.smallrye-graphql.show-runtime-exception-message=true
quarkus.smallrye-graphql.error-extension-fields=someErrors

注意事项

  • 确保 application.properties 文件位于正确的目录下(通常是 src/main/resources)。
  • quarkus.smallrye-graphql.error-extension-fields 配置的值应该是异常类中字段的名称,或者对应getter方法去掉get后的名称,多个字段用逗号分隔。
  • 如果错误消息仍然没有显示,请检查是否正确地实现了 GraphQLError 接口,并确保 getMessage() 方法返回的是您期望的自定义消息。

总结

通过配置 Quarkus 属性,您可以轻松地自定义 SmallRye GraphQL 中的错误消息和扩展字段。这使得您可以提供更详细、更友好的错误信息,从而改善 GraphQL API 的用户体验。记住启用 RuntimeException 消息的显示,并根据需要配置错误扩展字段,以便在 GraphQL 响应中包含自定义错误信息。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

260

2023.10.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

989

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

50

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2025.12.29

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

2

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

6

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

16

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

3

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.1万人学习

C# 教程
C# 教程

共94课时 | 5.7万人学习

Java 教程
Java 教程

共578课时 | 39.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号