
Java
JSon{ "errors": [ { "message": "Something went wrong" } ]}然而,有时候我们希望返回更加详细和自定义的错误信息,以帮助客户端更好地理解和处理错误。下面是一个示例,展示了如何在GraphQL Java中发送自定义错误。如何发送自定义错误?要发送自定义错误,我们需要定义一个实现了GraphQLError接口的错误类,并在GraphQL异常处理器中使用它。下面是一个简单的例子:Javapublic class CustomError implements GraphQLError { private String message; private int statusCode; public CustomError(String message, int statusCode) { this.message = message; this.statusCode = statusCode; } @Override public Map<String, Object> getExtensions() { Map<String, Object> extensions = new HashMap<>(); extensions.put("statusCode", statusCode); return extensions; } @Override public List<SourceLocation> getLocations() { return null; } @Override public ErrorType getErrorType() { return ErrorType.DataFetchingException; } @Override public String getMessage() { return message; }}public class MyGraphQLExceptionHandler implements GraphQLErrorHandler { @Override public List<GraphQLError> processErrors(List<GraphQLError> errors) { List<GraphQLError> processedErrors = new ArrayList<>(); for (GraphQLError error : errors) { if (error instanceof CustomError) { CustomError customError = (CustomError) error; processedErrors.add(customError); } else { processedErrors.add(error); } } return processedErrors; }}public class MyApp { public static void mAIn(String[] args) { GraphQLSchema schema = // 构建GraphQLSchema的代码 GraphQL graphQL = GraphQL.newGraphQL(schema) .errorHandler(new MyGraphQLExceptionHandler()) .build(); // 处理GraphQL请求的代码 }}在上面的代码中,我们定义了一个CustomError类,它实现了GraphQLError接口,并重写了相关方法来返回自定义的错误信息。我们还创建了一个MyGraphQLExceptionHandler类,它实现了GraphQLErrorHandler接口,并在processErrors方法中处理自定义错误。最后,我们在创建GraphQL实例时使用自定义异常处理器来处理错误。案例代码假设我们正在构建一个电子商务应用程序的后端服务,其中有一个查询product,用于获取产品的详细信息。如果找不到指定的产品,我们希望返回一个自定义的错误,以告诉客户端产品不存在。下面是一个示例代码,演示了如何在GraphQL Java中发送自定义错误:Javapublic class ProductNotFoundException extends RuntimeException { public ProductNotFoundException(String message) { super(message); }}public class ProductResolver implements GraphQLResolver<Product> { public ProductResolver(ProductRepository productRepository) { this.productRepository = productRepository; } public Product product(String id) { Product product = productRepository.findById(id); if (product == null) { throw new ProductNotFoundException("Product not found"); } return product; }}public class MyGraphQLExceptionHandler implements GraphQLErrorHandler { @Override public List<GraphQLError> processErrors(List<GraphQLError> errors) { List<GraphQLError> processedErrors = new ArrayList<>(); for (GraphQLError error : errors) { if (error instanceof ProductNotFoundException) { ProductNotFoundException exception = (ProductNotFoundException) error; processedErrors.add(new CustomError(exception.getMessage(), 404)); } else { processedErrors.add(error); } } return processedErrors; }}public class MyApp { public static void mAIn(String[] args) { ProductRepository productRepository = // 初始化ProductRepository的代码 ProductResolver productResolver = new ProductResolver(productRepository); GraphQLSchema schema = // 构建GraphQLSchema的代码 GraphQL graphQL = GraphQL.newGraphQL(schema) .errorHandler(new MyGraphQLExceptionHandler()) .build(); // 处理GraphQL请求的代码 }}在上面的代码中,我们定义了一个ProductNotFoundException类,它继承自RuntimeException。在ProductResolver类中,如果找不到指定的产品,我们抛出一个ProductNotFoundException异常。在MyGraphQLExceptionHandler类的processErrors方法中,我们捕获该异常,并将其转换为一个自定义错误,然后返回给客户端。通过使用GraphQL Java,我们可以方便地发送自定义错误信息给客户端。首先,我们需要定义一个实现了GraphQLError接口的错误类,并在异常处理器中使用它。然后,根据需要捕获和处理异常,并返回自定义的错误。这样,客户端就能更好地理解和处理错误,从而提高应用程序的可用性和用户体验。参考文献- GraphQL Java官方文档: Java.com/documentation/v16/">https://www.graphql-Java.com/documentation/v16/- GraphQL官方文档: https://graphql.org/Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号