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()。

Shakespeare
Shakespeare

一款人工智能文案软件,能够创建几乎任何类型的文案。

下载

示例代码

下面是一个完整的示例,展示了如何自定义异常以及如何在 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 响应中包含自定义错误信息。

相关文章

夸克浏览器
夸克浏览器

夸克Quark是一款采用 chromium 单核设计,网页渲染加载速度快,还有 0.3s 闪电启动的极速体验。内置隐私防护功能,能多方面保护用户隐私,可识别各种恶意软件和钓鱼网站,确保上网安全。与夸克网盘一体设计,拥有夸克高考、夸克搜题等多种智能工具,还有超过上万条过滤规则的超强去广告功能,以及智能拼页的阅读模式等。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

187

2023.10.18

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

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

288

2023.10.25

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

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

1024

2023.10.19

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

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

66

2025.10.17

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

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

450

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.18

热门下载

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

精品课程

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

共23课时 | 2.7万人学习

C# 教程
C# 教程

共94课时 | 7.1万人学习

Java 教程
Java 教程

共578课时 | 48万人学习

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

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